我遇到了一个障碍,尽管我已经使用 Stack Overflow 完成了大约 90% 的工作。
我的最终目标是传递一个NSString
(例如@“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 方面是新手。