私は16進数のNSStringを持っており、それをchar配列にパックできます。16進数NSString to char []
例えば、私はNSStringの持っている:
NSString* hex = "AABBCCDD";
を、私はCCCryptで使用するためのchar型の配列にそれを変換することができるようにしたい:
char bytes[] = { 0xAA, 0xBB, 0xCC, 0xDD };
はどうすればこれを行うことができますか?
私は16進数のNSStringを持っており、それをchar配列にパックできます。16進数NSString to char []
例えば、私はNSStringの持っている:
NSString* hex = "AABBCCDD";
を、私はCCCryptで使用するためのchar型の配列にそれを変換することができるようにしたい:
char bytes[] = { 0xAA, 0xBB, 0xCC, 0xDD };
はどうすればこれを行うことができますか?
あなたが各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);
注。
このような何かが動作するはず....
NSScanner *scanner = [NSScanner scannerWithString:@"AABBCCDD"];
uint32_t hex;
[scanner scanHexInt:&hex];
char bytes[] = {(hex >> 24) & 0xFF, (hex >> 16) & 0xFF, (hex >> 8) & 0xFF, hex & 0xFF};
テストされていない私は、ブラウザでそれをやったとして。
ここで私が書いたことを実際に見てきましたが、ちょうど16進intを取得してバイト配列に直接キャストすると同じことができます。 –
が正しく動作しません –
私はあなたがこのようなものを使用することができると思う:
const char* cString = [hex UTF8String];
これは、16進値ではなく文字列の値を返します。 –
彼が探していたものだと思った。誤解している必要があります。 –
thx、それは私の仕事です! –