2011-08-06 11 views
3

私は16進数のNSStringを持っており、それをchar配列にパックできます。16進数NSString to char []

例えば、私はNSStringの持っている:

NSString* hex = "AABBCCDD"; 

を、私はCCCryptで使用するためのchar型の配列にそれを変換することができるようにしたい:

char bytes[] = { 0xAA, 0xBB, 0xCC, 0xDD }; 

はどうすればこれを行うことができますか?

答えて

7

あなたが各2つのバイトの16進数の文字を経由するループのために使用することができます。次に、NSScannerを使用して文字配列のchar変数に読み込みます。 hexStringも長さ(二によって即ち割り切れる)を有している場合にのみ動作すること

NSString * hexString = @"AABBCCDD"; 
char * myBuffer = (char *)malloc((int)[hexString length]/2 + 1); 
bzero(myBuffer, [hexString length]/2 + 1); 
for (int i = 0; i < [hexString length] - 1; i += 2) { 
    unsigned int anInt; 
    NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)]; 
    NSScanner * scanner = [[[NSScanner alloc] initWithString:hexCharStr] autorelease]; 
    [scanner scanHexInt:&anInt]; 
    myBuffer[i/2] = (char)anInt; 
} 
... 
// use myBuffer here 
... 
printf("%s\n", myBuffer); 
free(myBuffer); 

注。

+0

thx、それは私の仕事です! –

2

このような何かが動作するはず....

NSScanner *scanner = [NSScanner scannerWithString:@"AABBCCDD"]; 
uint32_t hex; 
[scanner scanHexInt:&hex]; 
char bytes[] = {(hex >> 24) & 0xFF, (hex >> 16) & 0xFF, (hex >> 8) & 0xFF, hex & 0xFF}; 

テストされていない私は、ブラウザでそれをやったとして。

+0

ここで私が書いたことを実際に見てきましたが、ちょうど16進intを取得してバイト配列に直接キャストすると同じことができます。 –

+0

が正しく動作しません –

-1

私はあなたがこのようなものを使用することができると思う:

const char* cString = [hex UTF8String]; 
+1

これは、16進値ではなく文字列の値を返します。 –

+0

彼が探していたものだと思った。誤解している必要があります。 –