十六进制值在127之后变得怪异

时间:2013-06-17 22:43:26

标签: objective-c utf-8 hex

我正在尝试显示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。

1 个答案:

答案 0 :(得分: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]];

没有进一步的细节,这是我能给你的最佳答案。如果您提供更多详细信息,那么我很乐意编辑我的答案,以帮助您弄清楚究竟发生了什么。