Не всегда так.
byte byteValue=-1;
int value=byteValue0xff;
в итоге мы получим value==255ж, это хитрый хот для перевода signed byte
в unsigned byte;
Вчера вечером не допёр, а сегодня мы тут внимательно посмотрели вот на что:
public static int VaxInteger(byte[] buffer, int index, int length)
т.е там c самого начала буфер unsigned byte и вроде как приводить никого
никуда не надо. Да и само вриведение можно сделать намного проще и понятнее:
sbyte i = -1;
byte j = (byte)i;
byte k = (byte) (i & 0xff);
int l = i & 0xff;
int m = (byte) i;
результат
j = k = l = m = 255.
И ещё, ели даже там был бы sbyte[] buffer, то никто не отменял
арифметическое или, т.е. конструкция
newValue += (buffer[i++] & 0xff) << shift;
будет проще и понятнее выглядеть в таком виде:
newValue |= buffer[i++] << shift;
Т.е. версия метода такая:
public static int VaxInteger(byte[] buffer, int index, int length)
{
int newValue = 0;
int shift = 0;
while (-- length >= 0)
{
newValue |= buffer[index] << shift;
index ++;
shift += 8;
}
return newValue;
}
Как думаете?