alguenm ai pode me ajudar com isso ?
Você pode usar o tipo byte, que é equivalente ao signed char. Entretanto, você tem de prestar atenção quando for fazer algumas operações. Em particular, muitas vezes você terá de usar b & 0xFF, onde b é uma variável de tipo byte.
Se precisar do valor do unsigned char, você precisará promover a variável para um short.
Se estiver trabalhando com redes ou arquivos, dê uma olhada na classe ByteBufferWorker, que deixei no fórum para esse tipo de conversão:
Na verdade estou tentando portar um codigo de c para java e nele tem campos unsigned long,unsigned char e int.
Minha ideia é que:
unsigned char - so ira receber valores que estão entre 0 a 255 , acho que posso usar um int(-2.147.483.648 até 2.147.483.647) ou char(0 a 65535) em java.
int - faixa valores de -2.147.483.648 até 2.147.483.647 , exatamente um int em java.
unsigned long - 0 até 4.294.967.295 - long em java
Obs: long e int sao a mesma coisa em c. Assim como unsigned long e unsigned int . Ou nao ?.
sera que é isso mesmo ?.
será que ponteiros de c precisam de aguma atençao na hora de passar o codigo para java. ou é so remover os asteriscos ?.
tem esse array aqui:
static unsigned int msk[33] =
{
0x00000000,0x00000001,0x00000003,0x00000007,
0x0000000f,0x0000001f,0x0000003f,0x0000007f,
0x000000ff,0x000001ff,0x000003ff,0x000007ff,
0x00000fff,0x00001fff,0x00003fff,0x00007fff,
0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
0x000fffff,0x001fffff,0x003fffff,0x007fffff,
0x00ffffff,0x01ffffff,0x03ffffff,0x07ffffff,
0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff,
0xffffffff
};
obs: os métodos da classe irão usar estes valores. eles não sao assinados.o que eu espero é que eles não ganhem sinal nem modifiquem seus valores.
será que estou errando ao implementa-lo assim em java ?:
static long[] msk = {
0x00000000, 0x00000001, 0x00000003, 0x00000007,
0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff,
0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff,
0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff,
0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff,
0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff,
0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
0xffffffff
};
Você chegou a olhar pelo menos a classe que postei?
Você deve realmente promover o tipo de dado, se o valor te importar (e não só os bits).
Você pode converter assim:
C -> java
byte, short (signed ou não) -> int
int ou long -> long (ou mesmo int, se você souber que o dado que estará ali dentro cabe).
long long -> BigDecimal
char -> char
No caso, a declaração do seu array está certa, embora num array de máscara, geralmente só os bits importam, e tanto faz a representação decimal ganhar sinal ou não.
nao. é que eu achei que nao tinha a ver com minha necessidade mais eu vou dar uma olhada.
[quote]C -> java
byte, short (signed ou não) -> int
int ou long -> long (ou mesmo int, se você souber que o dado que estará ali dentro cabe).
long long -> BigDecimal
char -> char
[/quote]
vou lembrar disso.
obrigado.