【发布时间】:2011-11-23 10:35:21
【问题描述】:
我有一个数字的二进制补码表示,在一个字节数组中,我想扩展它以使用更大的字节数组。
(可以从BigIntegers 中得到补码byte[])
所以我的新字节数组必须有相同的符号位(即最高位) 然后其他一切都发生了变化。
所以:
byte[] resize (byte[] raw, int len)
{
byte high = raw[0];
resized[0] = high & 0x80 //ie binary 1000 0000
raw[0] = high & 0x7F // 0111 1111
//causes a side effect but i don't care raw is a throw away value
byte[] resized = new byte[len];
system.ArrayCopy(raw,0,resized,len-raw.length, len);
}
我在正确的轨道上吗? 我很难理解,字节长度的十六进制文字工作。 还是我的十六进制文字必须是 int 大小的? 如果是这样,我将不得不施放我的一切。
原来如此:
resized[0] = (byte) ((int)high & 0x8000)
raw[0] = (byte)((int)high & 0x7FFF)
等价物?
【问题讨论】:
-
你可能想重新命名你的帖子,因为“字节抨击”对我来说意义不大。
-
当然,Bytebashing(或者更常见的bit bashing)是指修改或与componany字节(或更常见的位)中的值交互
标签: java bytearray byte bit-manipulation twos-complement