1

我遇到了一个障碍,尽管我已经使用 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 方面是新手。

4

0 回答 0