-1

我正在尝试显示 0-255 的所有十六进制字符。我能够表示从 0x00 到 0x7f 的二进制数据,但是一旦我超过 0x7f,它看起来像是在进行某种类型的 UTF 格式化,并开始添加 C。这就是我的做法”

unichar value = 0;

for (value = 0; value < 255; value++) {

    [test writeExample:[NSString stringWithFormat:@"%C", value]];
}

有谁知道如何更改它以使其在 0x7f 之后继续显示正确​​的十六进制?我用 %c 试过 char,用 %C 试过 unichar。我已经能够表示 0x00 - 0x7f,但我无法表示扩展的 ascii 字符 0x80 - 0xFF。

4

1 回答 1

1

根据我对您的问题和Apple Dev Docs on String Formatters的理解,在将整数表示为十六进制值的情况下使用的正确字符串格式化程序是使用格式化程序%x。故事结局。

问题似乎在于您的writeExample:方法。因此,也许您应该尝试类似于以下的方法:

- (void)writeExample:(unichar)value
{
    NSLog(@"0x%02x", value);
}

它可能并不完美,但至少它是一个起点。这将打印一个十六进制表示。

如果您想将其作为字符串发送,您可以;只需将方法更改为:

- (void)writeExample:(NSString*)value
{
    unichar val = [value intValue];
    NSLog(@"0x%02x", val);
}

%d并使用格式而不是发送字符串%c

[test writeExample:[NSString stringWithFormat:@"%d", value]];

没有更多细节,这是我能给你的最好答案。如果您提供更多详细信息,那么我将很乐意编辑我的答案,以帮助您确切了解发生了什么。

于 2013-06-17T23:18:36.180 回答