private static int[] MakeMagnitude(
byte[] bytes,
int offset,
int length)
{
int end = offset + length;
// strip leading zeros
int firstSignificant;
for (firstSignificant = offset; firstSignificant < end
&& bytes[firstSignificant] == 0; firstSignificant++)
{
}
if (firstSignificant >= end)
{
return ZeroMagnitude;
}
int nInts = (end - firstSignificant + 3) / BytesPerInt;
int bCount = (end - firstSignificant) % BytesPerInt;
if (bCount == 0)
{
bCount = BytesPerInt;
}
if (nInts < 1)
{
return ZeroMagnitude;
}
int[] mag = new int[nInts];
int v = 0;
int magnitudeIndex = 0;
for (int i = firstSignificant; i < end; ++i)
{
v <<= 8;
v |= bytes[i] & 0xff;
bCount--;
if (bCount <= 0)
{
mag[magnitudeIndex] = v;
magnitudeIndex++;
bCount = BytesPerInt;
v = 0;
}
}
if (magnitudeIndex < mag.Length)
{
mag[magnitudeIndex] = v;
}
return mag;
}