2013-04-01 209 views
1

我在问这个问题,主要是因为我已经通过这个网站搜索了可能的解决方案,但都没有按照我希望的方式进行。将十六进制字符串转换为无符号字符[]

我想执行将此十六进制字符串转换为无符号字符[]。

NSString *text = @"0043600001";unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01}

我需要的十六进制表示0X ##因为我送接受只hexadecimal format消息的主机。我是否正确地说,我也需要NSScanner来执行这些步骤来分隔2个字符?真的迷失了我对我需要做的事情的困惑。

这是连接和发送十六进制消息到主机的步骤:

unsigned char dataSmall[] = {0x00, 0x43, 0x60, 0x00, 0x01} 
NSData *data = [NSData dataWithBytes:dataSmall length:sizeof(dataSmall)]; 

PS,我不知道该NSData的一部分,但它似乎当我使用NSData的线送工作十六进制信息发送给主机。所以我就这样离开了。目前,dataSmall[]是硬编码,我想知道如何动态处理它。希望这里有所帮助。

编辑1 啊,我错过了一个重要的信息。十六进制数据本身是一个ISO8583消息。

+0

你能否解释一下其中的十六进制字符串是从哪里来的?看起来很奇怪,你会有一堆十六进制数据作为字符串。 – rmaddy

+0

起初我对此有点困惑,所以我很抱歉,如果我没有给你你正在寻找的答案。目前,它将来自“TextField”。但我还没有做些什么,比如将ASCII字符串转换为十六进制数据。是的,将十六进制字符串转换为十六进制数据会很奇怪。 –

+0

如果你想将文本转换为可以发送给服务器的NSData,那么只需像这样获取NSData:NSData * textData = [someTextField.text dataUsingEncoding:NSUTF8StringEncoding];'。而已。您现在已经有了以UTF-8编码的文本字节,并且可以发送到服务器。服务器现在可以使用该数据重新创建UTF-8字符串。没有必要进行所有这种十六进制转换。 – rmaddy

回答

0
NSScanner *scan = [[NSScanner alloc] initWithString:@"1F61E"]; 
unsigned int val; 
[scan scanHexInt:&val]; 
char cc[4]; 
cc[3] = (val >> 0) & 0xFF; 
cc[2] = (val >> 8) & 0xFF; 
cc[1] = (val >> 16) & 0xFF; 
cc[0] = (val >> 24) & 0xFF; 
NSString *s = [[NSString alloc] 
       initWithBytes:cc 
       length:4 
       encoding:NSUTF32StringEncoding]; 
NSLog(@"[%@]", s); 
+0

感谢您的示例代码,将对其进行测试并回复此评论。但我可以问,这个'1F61E'是什么?和那些0,8,16,24的val比较。他们想要做什么? –

+0

1f61E是十六进制值,(0,8,16,24)是二进制移位,你可能听说过二进制移位。 –

+0

不,我没有。谢谢,我会阅读有关它。 –

相关问题