将NSString转换为int HEX

时间:2013-01-07 12:23:20

标签: objective-c ios c

我正在尝试将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];

它们似乎都不起作用。

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

3 个答案:

答案 0 :(得分:2)

不是一个真正的答案,但我怀疑原来的问题与" hex"之间的区别感到困惑。和"二进制"。现代计算机内部的所有数据都在" bit" - 零和零。一个"整数"一般是32或64个/ 0。 A"字符"是8,16或32个1/0,具体取决于特定的字符集和上下文。

为了让人类检查这些电子零和零,它们必须以某种人类可读的形式呈现。最简单的是"二进制" - 例如,00001010二进制数的值为10(十进制)。由于二进制不是很紧凑,"八进制"被发明。在八进制中,00001010二进制值为012.

但大多数电脑"字"是8位的倍数,八进制不能均匀地表示8位的倍数,因此" hex" ("十六进制")是发明的。在十六进制中,00001010表示为0A。

这意味着你唯一的一次转换"十六进制的东西是显示它。但是相当频繁的新手在这一点上感到困惑,并认为将一个角色转换为数字内部表示是将其转换为十六进制数据。

事实上,已经的字符数字内部表示 - 它只是提取个别字符和(可选)"铸造"它是一个整数类型(并注意" cast"不会更改值,只是它可以存储的变量类型)。

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

答案 1 :(得分: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);

答案 2 :(得分:-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;
}
相关问题