Я знаю, что есть недостающее количество, но есть лучший способ сделать это, что менее запутанно, чем показанный пример.32 бит int сдвинуто на величину, не находящуюся в диапазоне
static long getLong(byte[] sourceBytes, int sourceBytesIndex, int numOfBytesToConvert)
{
long longValue = 0;
longValue = (sourceBytes[sourceBytesIndex] & 0xFF) +
((sourceBytes[sourceBytesIndex + 1] & 0xFF) << 8);
if (numOfBytesToConvert > 2)
{
longValue += ((sourceBytes[sourceBytesIndex + 2] & 0xFF) << 16) +
((sourceBytes[sourceBytesIndex + 3] & 0xFF) << 24);
if (numOfBytesToConvert > 4)
{
longValue += ((sourceBytes[sourceBytesIndex + 4] & 0xFF) << 32) +
((sourceBytes[sourceBytesIndex + 5] & 0xFF) << 40);
if (numOfBytesToConvert > 6)
{
longValue += ((sourceBytes[sourceBytesIndex + 6] & 0xFF) << 48) +
((sourceBytes[sourceBytesIndex + 7] & 0xFF) << 56);
}
}
}
return longValue;
}
Как насчет простого цикла? – Voo
BTW: Использование '& 0xFFL' вместо' & 0xFF' даст вам «длинные» значения. –