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
- 24位二进制解析为有符号整数
- 快速求一个32位无符号整数二进制中为1的个数
- 快速求一个32位无符号整数二进制中为1的个数
- 求32位无符号整数中比特为1的二进制位数
- c# byte数组转换 8位有符号整数 16位有符号整数 32位有符号整数
- 计算一个 32 位无符号整数有多少个位为 1
- 计算一个 32 位无符号整数有多少个位为 1
- [LeetCode]405. Convert a Number to Hexadecimal(32位有符号整数转化为十六进制)
- 64位有符号与无符号类型的整数
- 验证字符串是否为有符号整数
- 无符号整数转换为二进制、八进制和十六进制
- 符号位为1的二进制转十进制负数
- 统计无符号整数比特位为1的数量
- 将整数num转化为32位的二进制数
- C语言的有符号与无符号,二进制整数的扩展与截断
- 有符号整数、无符号整数的转换以及小数据转换为大数据
- 有符号整数 存储
- 有符号整数与无符号整数
- 如何学好FPGA
- Markdown编辑技巧记录
- 运算符之间的用法与比较
- php 变量值比较注意事项
- ARC 总结
- 24位二进制解析为有符号整数
- CodeForces 366A
- 设计模式(四)
- VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'
- 安装Windows补丁KB947821报错0x8007000d The data is invalid
- UI_01.第一个ios UI
- 多线程模拟实现生产者/消费者模型
- Spark学习之编程进阶——累加器与广播(5)
- Android Scroller原理