1

NSStringaを int HEX 配列に変換しようとしています。

たとえば、私が持っていて@"HELLO"、取得したい場合0x48 0x45 0x4c 0x4c 0x4f

文字列の各文字に対して試しました:

unsigned int hexInt;
sscanf([stringParam UTF8String], "%u", &hexInt);

unsigned int hexInt;
[[NSScanner scannerWithString:stringParam]scanHexInt:&hexInt];

それらのどれも機能していないようです。

取得する最良の方法は何ですか: unsigned int res[]ASCII からNSString?

4

3 に答える 3

2

本当の答えではありませんが、元の質問が「16進」と「2進」の区別について混乱していると思われます。最新のコンピュータ内部のすべてのデータは、「ビット」、つまり 1 と 0 で操作されます。「整数」は通常、32 個または 64 個の 1/0 を組み合わせたものです。「文字」は、特定の文字セットとコンテキストに応じて、8、16、または 32 個の 1/0 です。

人間がこれらの電子的な 1 と 0 を調べることができるようにするには、それらを人間が読める形式で提示する必要があります。最も単純なのは「バイナリ」です。たとえば、00001010 バイナリの数値は 10 (10 進数) です。2 進数はあまりコンパクトではないため、「8 進数」が発明されました。8 進数では、バイナリ値 00001010 は 012 になります。

しかし、ほとんどのコンピューターの「単語」は 8 ビットの倍数であり、8 進数は 8 ビットの倍数を均等に表すわけではないため、「16 進数」(「16 進数」) が発明されました。16 進数では、00001010 は 0A として表されます。

これが意味することは、何かを 16 進数に「変換」するのは、それを表示するときだけだということです。しかし、かなり頻繁に初心者はこの点で混乱し、たとえば文字を数値内部表現に変換することは「16 進数に変換する」ことだと考えます。

実際、文字にはすでに数値の内部表現あります。個々の文字を抽出し、(オプションで) それを整数型に "キャスト" するだけです ("キャスト" は値を変更せず、型のみを変更することに注意してください)。格納できる変数)。

彼の最後の文で、OP はint値の配列が必要であることを示しました。個々の NSString 文字はすでに整数であり、unicharタイプのみです。整数への「変換」は、目的のターゲット型にキャストするだけの問題です。

于 2013-01-07T13:13:22.243 に答える
1

では、文字列の文字を整数の配列に格納したいと思いませんか?

unsigned short(32 ビット) の代わりに (16 ビット)を使用しても問題ない場合unsigned int、それは非常に簡単です。

NSUInteger length = [stringParam length];
unichar *characters = malloc(sizeof(unichar) * length);
[stringParam getCharacters:characters range:NSMakeRange(0, length)];
// Do whatever you want with the characters, then, once you're done...
free(characters);
于 2013-01-07T14:44:51.957 に答える
-1

この関数を試してください:

- (NSArray *)stringToHex:(NSString *)str
{
    NSUInteger len = [str length];
    unichar *chars = malloc(len * sizeof(unichar));
    [str getCharacters:chars];

    NSMutableArray *hexArray = [NSMutableArray array];

    for(NSUInteger i = 0; i < len; i++ )
    {
        NSString *hexString = [NSString stringWithFormat:@"%02x", chars[i]];
        [hexArray addObject:hexString];
    }
    free(chars);

    return hexArray;
}
于 2013-01-07T12:33:33.940 に答える