You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.8 KiB
72 lines
1.8 KiB
|
|
long
|
|
EncodeInteger(
|
|
unsigned char * pbEncoded,
|
|
unsigned char * pbInt,
|
|
unsigned long dwLen,
|
|
int Writeflag)
|
|
{
|
|
long count;
|
|
unsigned long i;
|
|
long j;
|
|
|
|
if (Writeflag)
|
|
pbEncoded[0] = 0x02;
|
|
|
|
count = 1;
|
|
|
|
i = dwLen - 1;
|
|
|
|
// find the most significant non-zero unsigned char
|
|
while ((pbInt[i] == 0) && (i > 0))
|
|
i--;
|
|
|
|
if ((i == 0) && (pbInt[i] == 0))
|
|
// this means that the integer value is 0
|
|
{
|
|
if (Writeflag)
|
|
{
|
|
pbEncoded[1] = 0x01;
|
|
pbEncoded[2] = 0x00;
|
|
}
|
|
count += 2;
|
|
}
|
|
else
|
|
{
|
|
// if the most significant bit of the most sig unsigned char is set
|
|
// then need to add a 0 unsigned char to the beginning.
|
|
if (pbInt[i] > 0x7F)
|
|
{
|
|
// encode the length
|
|
count += EncodeLength (pbEncoded + count, i+2, Writeflag);
|
|
|
|
if (Writeflag)
|
|
{
|
|
// set the first unsigned char of the integer to zero and increment count
|
|
pbEncoded[count++] = 0x00;
|
|
|
|
// copy the integer unsigned chars into the encoded buffer
|
|
j = i;
|
|
while (j >= 0)
|
|
pbEncoded[count++] = pbInt[j--];
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
// encode the length
|
|
count += EncodeLength (pbEncoded + count, i+1, Writeflag);
|
|
|
|
// copy the integer unsigned chars into the encoded buffer
|
|
if (Writeflag)
|
|
{
|
|
j = i;
|
|
while (j >= 0)
|
|
pbEncoded[count++] = pbInt[j--];
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return (count);
|
|
}
|