将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
?
所以,你想存储一个字符串的字符在一个整数数组中,对吗?
如果你可以使用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);
不错,干净,谢谢! – 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
类型。 “转换”为整数仅仅是转换为所需目标类型的问题。
我的意思是表示,是的,它仍然是一个int – MariusBudin
技术上正确,但不是真正的答案我的问题,谢谢! – MariusBudin
你可以使用:'dataUsingEncoding'。 – Larme
你尝试过'res [i] =(int)[stringParam characterAtIndex:i];'在循环中吗? (当然,你需要首先分配数组。) –
创建的NSData对象将被打印为:,这不是真正的十六进制数组,它只是丑陋的。 –