2017-11-01 4 views
0

ein 6-Byte-Array von einem bestimmten TLV-Tag Gegeben:Konvertieren BCD-Byte-Array in einem NSDecimalNumber

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

Wie man es auf die Dezimalzahl mit Wert umwandeln könnte:

12345 

Ich habe versucht, etwas finden, das bereits in der Foundation implementiert ist, aber ohne Erfolg.

+0

Das Ergebnis scheint nicht auf den Byte-Array (3 vs 6 Ziffern, unterschiedliche Reihenfolge) – vadian

+0

Ich aktualisiere die Frage mit schönen Beispiel zusammenzuzuhängen. Diese Kodierung wird für '9F02' tlv-Tags verwendet, um Dezimalzahlen darzustellen. –

Antwort

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]; 
0

einfach mul und fügen:

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]; 

in Safari typisiert.

Verwandte Themen