oc 16进制字符串与10进制的转换 两行代码搞定

    下面是一个帐号的转换,需要给渔船设备传递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返回。

转载于:https://my.oschina.net/renshengwudi/blog/626852

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Objective-C中,可以使用正则表达式来查找和替换字符串。使用正则表达式可以根据特定的规则来匹配和操作字符串。 首先,使用`NSRegularExpression`类来创建一个正则表达式对象。可以通过使用`regularExpressionWithPattern:options:error:`方法并传入匹配模式、选项和错误对象来创建该对象。 接下来,可以使用`matchesInString:options:range:`方法来在字符串中查找所有符合模式的子串。这个方法将返回一个包含`NSTextCheckingResult`对象的数组,每个对象表示一个匹配结果。可以通过`range`属性来获取匹配子串在原始字符串中的位置。 然后,可以使用`substringWithRange:`方法从原始字符串中提取出匹配的子串。 如果需要替换字符串中的某些内容,可以使用`replaceMatchesInString:options:range:withTemplate:`方法来替换匹配的子串。该方法将根据提供的替换模板来替换匹配内容。例如,可以使用`"****"`作为替换模板来替换电话号码中的中间四位。 总结一下,在Objective-C中查找和替换字符串的步骤如下: 1. 创建`NSRegularExpression`对象并指定匹配模式和选项。 2. 使用`matchesInString:options:range:`方法在字符串中查找符合模式的子串。 3. 遍历匹配结果数组,使用`substringWithRange:`方法提取出匹配的子串。 4. 如果需要替换字符串中的内容,使用`replaceMatchesInString:options:range:withTemplate:`方法进行替换。 希望这些信息对你有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值