我有一个数字的二进制补码表示,在一个字节数组中,我想扩展它以使用更大的字节数组。byte[]
(你可以从s中得到补码BigInteger
)
所以我的新字节数组必须具有相同的符号位(即最高位),然后其他所有内容都移位。
所以:
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)
等价物?