将十六进制字符串转换为unsigned char []

时间:2013-04-01 04:08:46

标签: objective-c hex unsigned-char

我问这个问题主要是因为我在这个网站上搜索了可能的解决方案,没有一个按照我希望的方式解决。

我想将此Hex字符串转换为unsigned char []。

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)];

P.S,我不知道NSData部分,但是当我使用NSData线路向主机发送十六进制消息时似乎有效。所以我将它保留原样。目前,dataSmall[]是硬编码的,我想知道如何动态处理它。非常感谢所有帮助。

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

1 个答案:

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