1

我正在尝试将 a 转换NSString为 int HEX 数组。

例如,如果我有@"HELLO"并且我想得到0x48 0x45 0x4c 0x4c 0x4f

我已经尝试过字符串的每个字符:

unsigned int hexInt;
sscanf([stringParam UTF8String], "%u", &hexInt);

unsigned int hexInt;
[[NSScanner scannerWithString:stringParam]scanHexInt:&hexInt];

它们似乎都不起作用。

获得的最佳方法是什么:unsigned int res[]从 ASCII NSString

4

3 回答 3

2

不是真正的答案,但我怀疑原始问题对“十六进制”和“二进制”之间的区别感到困惑。现代计算机内部的所有数据都以“位”(一和零)进行操作。“整数”通常是 32 或 64 个 1/0 加在一起。一个“字符”是 8、16 或 32 个 1/0,具体取决于特定的字符集和上下文。

为了允许人类检查这些电子 1 和 0,它们必须以某种人类可读的形式呈现。最简单的是“二进制”——例如,00001010 二进制的数值为 10(十进制)。由于二进制不是很紧凑,因此发明了“八进制”。在八进制中,00001010 二进制值将是 012。

但大多数计算机“字”都是 8 位的倍数,而八进制不能均匀地表示 8 位的倍数,因此发明了“十六进制”(“hexadecimal”)。在十六进制中,00001010 表示为 0A。

这意味着您唯一将某些内容“转换”为十六进制的时间就是显示它。但相当频繁的新手在这一点上感到困惑,并认为将字符转换为数字内部表示就是“将其转换为十六进制”。

事实上,字符已经一个数字内部表示——只需提取单个字符并(可选)将其“转换”为整数类型(请注意,“转换”不会改变值,只是类型它可以存储在变量中)。

在他的最后一句话中,OP 表示他想要一个值数组int。单个 NSString 字符已经是整数,只是unichar类型。“转换”为整数只是转换为所需目标类型的问题。

于 2013-01-07T13:13:22.243 回答
1

那么,您想将字符串的字符存储在整数数组中,对吗?

如果您可以使用unsigned short(16 位)而不是unsigned int(32 位),那真的很容易。

NSUInteger length = [stringParam length];
unichar *characters = malloc(sizeof(unichar) * length);
[stringParam getCharacters:characters range:NSMakeRange(0, length)];
// Do whatever you want with the characters, then, once you're done...
free(characters);
于 2013-01-07T14:44:51.957 回答
-1

试试这个功能:

- (NSArray *)stringToHex:(NSString *)str
{
    NSUInteger len = [str length];
    unichar *chars = malloc(len * sizeof(unichar));
    [str getCharacters:chars];

    NSMutableArray *hexArray = [NSMutableArray array];

    for(NSUInteger i = 0; i < len; i++ )
    {
        NSString *hexString = [NSString stringWithFormat:@"%02x", chars[i]];
        [hexArray addObject:hexString];
    }
    free(chars);

    return hexArray;
}
于 2013-01-07T12:33:33.940 回答