スタックオーバーフローを使用して約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 の初心者であると想定できます。