1

スタックオーバーフローを使用して約90%の道のりを歩んできましたが、私は障害に直面しています。

私の最終的な目標は、NSStringスペースで区切られた 2 つの 16 進コードである (@"51 EC" など) を渡すことです。

次のルーチンを使用して、これをASCIIベースに変換しNSStringます。

- (NSString *)hexToString:(NSString *)string {
    // this routine takes a 2 byte HEX coded sting
    // with a space between them and converts to
    // another string that is ASCII character based

    NSMutableString *newString = [[NSMutableString alloc] init];
    NSScanner *scanner = [[NSScanner alloc] initWithString:string];
    unsigned value;
    while ([scanner scanHexInt:&value]) {
        [newString appendFormat:@"%c",(char)(value & 0xFF)];
    }
    string = [newString copy];
    return string;
}

これは機能しているようです。

NSStringこれをシリアルケーブルでデバイスに送信します。反対側のデバイスは、ASCIIコード文字列をエコー バックします (ASCII値が 127 dec を超える文字を含めることができます)。

次のルーチンを見つけました。

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

    NSMutableString *hexString = [[NSMutableString alloc] init];

    for (NSUInteger i = 0; i < len; i++) {
        [hexString appendFormat:@"%02x", chars[i]];
    }
    free(chars);
    return hexString;
}

これを読んNSStringで変換したい@"51EC"

ASCIIコードを渡すときに返されるのNSString@"51cf"

127未満のすべてのバイトが適切に変換されるようです。ルーチンが unichar を使用しているため、0 から 127 に制限される可能性があるためだと思います。

適切な質問をするのに十分な情報を提供できれば幸いです。

もっとエレガントな解決策があるかもしれません。

私は経験豊富なハードウェア エンジニアですが、Objective-C の初心者であると想定できます。

4

0 に答える 0