将NSString转换为int HEX

问题描述:

我试图将NSString转换为int HEX数组。将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

+0

你可以使用:'dataUsingEncoding'。 – Larme

+0

你尝试过'res [i] =(int)[stringParam characterAtIndex:i];'在循环中吗? (当然,你需要首先分配数组。) –

+0

创建的NSData对象将被打印为:,这不是真正的十六进制数组,它只是丑陋的。 –

所以,你想存储一个字符串的字符在一个整数数组中,对吗?

如果你可以使用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); 
+0

不错,干净,谢谢! – MariusBudin

尝试使用此功能:

- (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; 
} 

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

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

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

这是什么意思是,你唯一一次“转换”为十六进制是显示它。但相当频繁的新手会对这一点感到困惑,并认为将一个字符转换为数字内部表示就是“将其转换为十六进制”。

事实上,已经有的字符有这是一个数字的内部表示 - 它只是提取单个字符和(可选)将其“铸造”为整数类型(注意“铸造”不会更改值,只是它可以存储的变量的类型)。

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

+0

我的意思是表示,是的,它仍然是一个int – MariusBudin

+0

技术上正确,但不是真正的答案我的问题,谢谢! – MariusBudin