zoukankan      html  css  js  c++  java
  • 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进制。

  • 相关阅读:
    pycharm使用小技巧
    多线程的异常处理
    零星
    python的多线程 ThreadPoolExecutor
    零星
    python的轮询timer 和js的轮询setInterval
    fcitx 输入框纵向
    Gvim配置
    窗口,父窗口parentwindow,所有者窗口ownerwindow
    Request对象 --web浏览器向web服务端的请求
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/13608185.html
Copyright © 2011-2022 走看看