我在Processing中编写程序,但我认为这不仅仅是这种语言问题。代码:
long combine8(int array[]) {
long result = 0;
for (int i = 0; i<8; i++) {
byte byteval = (byte)array[i];
result |= (byteval<<(8*i));
}
return result;
}
此函数将8个字节组合为一个长值。正常工作,直到其中一个数组值为零。它只是忽略它。例如:
Array value: 1 binary 00000001
Array value: 0 binary 00000000
Array value: 0 binary 00000000
Array value: 0 binary 00000000
Array value: 0 binary 00000000
Array value: 160 binary 10100000
Array value: 255 binary 11111111
Array value: 25 binary 00011001
Result: 11111111111111111010000000000001
由于解析long为int以便以十进制显示,结果值被削减,但这无论如何,它足以看到前16位。它忽略零数组值并在1之后写入160。 有没有办法将这些零应用于结果?
答案 0 :(得分:2)
狂野猜测:首先尝试将你的字节转换为long:
result |= (((long)byteval)<<(8*i));
或者只是避免在开始时将array[i]
投射到byte
。