iOS _byte 与 bit的转换

作者: wahkim | 来源:发表于2018-08-30 10:13 被阅读455次
    前言:

    最近遇到个问题,APP这边socket上发上去的是字节流,接收到的也是字节流,我需要根据其中的字节拿到该字节的8为比特,并转化为有用的数据。

    基础知识点:
    1. bit:位
      一个二进制数据0或1,是1bit;

    2. byte:字节
      存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45) 即是指 45个字节;
      1 byte = 8 bit

    3. 一个英文字符占一个字节;
      1 字母 = 1 byte = 8 bit

    4. 一个汉字占2个字节;
      1 汉字 = 2 byte = 16 bit
      byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1)
      short:两个字节(16位)(-32768~32767)(-2的15次方到2的15次方-1)
      int:四个字节(32位)(一个字长)(-2147483648~2147483647)(-2的31次方到2的31次方-1)
      long:八个字节(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1)
      float:四个字节(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的负45次方)
      double:八个字节(64位)(1.797693e+308~ 4.9000000e-324

    5. & 按位与运算符 , |按位或运算符 ,>>右移运算符 , << 左移运算符。(具体有空再补充)

    byte转bit
                    Byte b = cmds[0x21];
                    Byte array[8] = {0};
                    for (int i = 7; i >= 0; i--) {
                        array[i] = (Byte)(b & 1);
                        b = (Byte) (b >> 1);
                    }//array 为8位bit的数组
                    DLog(@"0 = %hhu, 1 = %hhu",array[0],array[1]);
    
    bit转byte
    - (Byte)decodeBinaryString:(NSString *)byteStr{ // 传入例子@“01001000”
        unsigned long result;
        if (!byteStr.length) {
            return 0;
        }
        NSInteger length = byteStr.length;
        if (length != 4 && length != 8) {
            return 0;
        }
        if (length == 8)
        {
            if ([byteStr characterAtIndex:0] == '0') { // 正数
                result = strtoul([byteStr UTF8String], 0, 2);
            }else{ // 负数
                result = strtoul([byteStr UTF8String], 0, 2) - 256;
            }
        }
        else
        {
            result = strtoul([byteStr UTF8String], 0, 2); // 2进制转为10进制
        }
        DLog(@"result = %hhu",(Byte)result);
        return (Byte)result;
    }
    

    先这样有空再来补充其他的。

    相关文章

      网友评论

        本文标题:iOS _byte 与 bit的转换

        本文链接:https://www.haomeiwen.com/subject/kncrwftx.html