int BerEncoder_encodeOIDToBuffer(const char* oidString, uint8_t* buffer, int maxBufLen)
{
int encodedBytes = 0;
int x = atoi(oidString);
char sepChar = '.';
const char* separator = strchr(oidString, '.');
if (separator == NULL) {
sepChar = ',';
separator = strchr(oidString, ',');
}
if (separator == NULL) {
sepChar = ' ';
separator = strchr(oidString, ' ');
}
if (separator == NULL) return 0;
int y = atoi(separator + 1);
int val = x * 40 + y;
if (encodedBytes < maxBufLen)
buffer[encodedBytes] = (uint8_t) val;
else
return 0;
encodedBytes++;
while (1) {
separator = strchr(separator + 1, sepChar);
if (separator == NULL)
break;
val = atoi(separator + 1);
if (val == 0) {
buffer[encodedBytes++] = 0;
}
else {
int requiredBytes = 0;
int val2 = val;
while (val2 > 0) {
requiredBytes++;
val2 = val2 >> 7;
}
while (requiredBytes > 0) {
val2 = val >> (7 * (requiredBytes - 1));
val2 = val2 & 0x7f;
if (requiredBytes > 1)
val2 += 128;
if (encodedBytes == maxBufLen)
return 0;
buffer[encodedBytes++] = (uint8_t) val2;
requiredBytes--;
}
}
}
return encodedBytes;
}
OID计算方法
最新推荐文章于 2025-05-21 12:04:25 发布