iOS里int如何转换成NSData

开始我问了这个问题,先是百度了一下。
他们的方法是。

NSData *rdata = [[NSData alloc]initWithData:[[NSSString stringWithFormat:@"%d",i] dataUsingEncoding:NSUTF8StringEncoding]];

简单点说就是,把int转换为了string,然后再用string变成data。
不由得鼓掌,精彩!然而,int是一个数字啊!比如345,你以这种形式转data那么就是333435。
因为对应的asscii码事这样啊。
345应该是,159才对。
345的十六进制为159。
正确的方法应该是。

                           Byte b1=i & 0xff;
                           Byte b2=(i>>8) & 0xff;
                           Byte b3=(i>>16) & 0xff;
                           Byte b4=(i>>24) & 0xff;
                           Byte byte[] = {b4,b3,b2,b1};
                           NSData *adddata = [NSData dataWithBytes:byte length:sizeof(byte)];

因为项目有规定,所以要传4位。

最近学了CSAPP里面位移运算与按位或运算符。
分别是左移<< 右移>>。 按位或运算符&0xff
左移多少可以简单理解为*2的n次方。
右移可以理解为/2的n次方。
而&0xff就是取8位也就是1个byte的意思。
Byte b1=i & 0xff;
Byte b2=(i>>8) & 0xff;
Byte b3=(i>>16) & 0xff;
Byte b4=(i>>24) & 0xff;
简单理解就是,依次取两位byte变为16进制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值