将BCD字节数组转换为NSDecimalNumber

时间:2017-11-01 22:04:12

标签: objective-c nsdata bcd tlv

给定来自特定TLV标记的6字节数组:

unsigned char bytes[] = { 0x00, 0x00, 0x00, 0x01, 0x23, 0x45 };
NSData * data = [NSData dataWithBytes:bytes length:6];

如何将其转换为值为的小数:

12345

我尝试找到已在基金会实施的内容,但没有运气。

2 个答案:

答案 0 :(得分:1)

// Step 1: convert data to string
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:data.length];
unsigned char *bytes = [data bytes];
for (NSUInteger i = 0; i < [data length]; i++)
    [string appendFormat:@"%.2x", bytes[i]];

// Step 2: convert string to decimal number
NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithString:string];

答案 1 :(得分:0)

简单地添加:

int sum = 0;
for( int c = 0; c<6 c++ )
{
  sum *= 100; // shift up two decimal digits
  sum += bytes[c] & 0xF + 10 * bytes[c] >> 4; // add new digits
}
NSNumber *result = [NSNumber numberWithInt:sum];

输入Safari。

相关问题