У меня есть двоичное представление числа в байтовом массиве, и я хочу расширить его, чтобы использовать больший байтовый массив.
(Вы можете получить два дополнения byte[]
из 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)
Эквивалент?