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进制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,740评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,767评论 0 33
  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,344评论 8 114
  • 1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或...
    哈哈哎呦喂阅读 672评论 0 0
  • 1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值...
    黄海佳阅读 5,849评论 0 1