下面是一个帐号的转换,需要给渔船设备传递16进制的字符串,之后经设备进行北斗与服务间的通信,下面是转换的方式:
NSLog(@"%x",50038);
2016-03-01 22:16:58.861 testStr[3855:369016] 12a401927
因为需要,整好必须是4个子节,然后16进制位8位,所以可以用以下方法进行转换
NSLog(@"%.8x",50038);
2016-03-01 22:22:27.647 testStr[3905:374086] 0000c376
这样的对比就比较明显了,.8x表示不足8位的在前面补0
反之需要对16进制转成10进制进行处理,也很简单,当初用了各种方法,比如单个截取然后转乘100进制,效率低下且容易出错,然而明明有更好的方法可以解决的,下面给出方法
NSLog(@"%ld",strtoul([@"0000c376" UTF8String],0, 16));
2016-03-01 22:29:57.755 testStr[3978:380678] 50038
原则上16进制转成10进制调用了c语言的函数,具体以下,见下--
strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。当base值为0时会根据情况选择用哪种进制:如果第一个字符是'0',就判断第二字符如果是‘x’则用16进制,否则用8进制;第一个字符不是‘0’,则用10进制。一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
来源:oschina
链接:https://my.oschina.net/u/1051209/blog/626852