Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用无符号int/char值_Java - Fatal编程技术网

如何在java中使用无符号int/char值

如何在java中使用无符号int/char值,java,Java,我试图在Java中模仿旧的遗留C程序行为。C代码是: void calc_crc(unsigned char *datbuff,unsigned int length) { static unsigned char tmp; static unsigned int crc,zaehler; crc = 0; for (zaehler = 0;zaehler < length ;zaehler ++) { tmp=(unsigned char) (crc>>8) ; crc=(c

我试图在Java中模仿旧的遗留C程序行为。C代码是:

void calc_crc(unsigned char *datbuff,unsigned int length)
{
static unsigned char tmp;
static unsigned int crc,zaehler;
crc = 0;
for (zaehler = 0;zaehler < length ;zaehler ++)
{
tmp=(unsigned char) (crc>>8) ;
crc=(crc<<8) ^ crctab[tmp] ^ *datbuff;
datbuff++;
}
}

static unsigned short crctab[256] =
{ // Some values
};
void calc\u crc(无符号字符*datbuff,无符号整数长度)
{
静态无符号字符tmp;
静态无符号整数crc,zaehler;
crc=0;
for(zaehler=0;zaehler>8);

crc=(crc您可以使用下一个更高的整数类型(long而不是int,…)并正确屏蔽输入。8字节值更复杂-通常在这种情况下必须使用BigInteger-尽管有时您可以使用带符号的数字和一些技巧,这取决于操作、移位和异或的工作方式,与符号位无关


但问题是给定的代码首先不能“模仿”,因为它是实现定义的。
无符号int
可以是2、4或8个字节-根据您的选择,C不需要任何特定的右移操作。

您可以使用下一个更高的整数类型(long而不是int,…)并正确屏蔽输入。8字节值更复杂-通常在这种情况下必须使用BigInteger-尽管有时您可以使用带符号的数字和一些技巧,这取决于操作、移位和异或的工作方式,与符号位无关


但问题是给定的代码不能“模仿”首先,因为它是由实现定义的。
无符号int
可以是2、4或8个字节-根据您的选择,C不需要任何特定的右移操作。

最简单的方法是始终使用至少一个大小。也就是说,在C使用字符的情况下,您可以使用短字符或int。在这种情况下,需要更多的处理这些值可以使它们处于检查状态,但这在大多数情况下可以通过掩蔽来处理


较长的答案是,您可以对有符号变量执行相同的操作,但要转换所有值。此外,在java中使用移位时要非常小心,确保使用>>>,否则只会混淆您自己。>>是有符号的右移,>>>是无符号的。在大多数情况下,如果确保使用正确的大小变量,代码可能会正常工作ABLE和正确的移位运算符。

最简单的方法是始终使用至少一个大的字符。例如,在C使用字符的情况下,您使用短字符或int。在这种情况下,需要更多地修改值以保持它们处于检查状态,但这在大多数情况下可以通过掩蔽处理

较长的答案是,您可以对有符号变量执行相同的操作,但要转换所有值。此外,在java中使用移位时要非常小心,确保使用>>>,否则只会混淆您自己。>>是有符号的右移,>>>是无符号的。在大多数情况下,如果确保使用正确的大小变量,代码可能会正常工作操作员和正确的换档操作员