24位二进制解析为有符号整数

来源:互联网 发布:腾讯游戏礼包领取软件 编辑:程序博客网 时间:2024/06/06 04:04

方法一:

#include <stdio.h></span>int getdata(char *buf, int n)       //buf[0]是高位字节, buf[2]是低位字节</span>{int ret = 0;short s = (short)buf[0];    //将buf[0]符号扩展为两个字节,即ps[1],ps[0]char *ps = (char *)&s;      char *pret = (char *)&ret;       // 将buf[2],buf[1],ps[0],ps[1] 拼接为int的四个字节     pret[0] = buf[2];pret[1] = buf[1];pret[2] = ps[0];      pret[3] = ps[1];return ret;}int main(){int result = 0;char a[3] = { 0x01, 0x01, 0x01 };char b[3] = { 0xf0, 0x01, 0x01 };result = getdata(a, 3);printf("%d\n", result);result = getdata(b, 3);printf("%d\n", result);getchar();}

方法二int getdata(unsigned char *buf, int n){<span style="white-space:pre"></span>int ret = buf[0]<<16;    // buf[0]为高位, 左移16位,相当于buf[0]*2^16<span style="white-space:pre"></span>ret|= buf[1] << 8;       //相对于buf[1]*2^8<span style="white-space:pre"></span>ret |= buf[2];           //‘或’相当于相加<span style="white-space:pre"></span>return ret;}
方法二中需要注意的是buf的类型,有符号和无符号运算结果不一样。计算机中变量的首地址都是按4字节(32位机器)或者8字节(64位机器)对齐的。单个char变量还是占了一个整数的内存,存的也是整数

运行结果为:


0 0
原创粉丝点击