[RESOLVIDO ]representar unsigned char de c em java?

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.