将2个字节统一为Int
Unify 2 bytes to Int
我有一个函数,允许我在2字节中分离INT值(例如:INT "123123"的结果是E0F3;highByte= 0xF3
和lowByte=0xE0
)
void int2bytes(unsigned char dest[2],int val){
int hByte=0;
int lByte=0;
hByte=val&0XFF;
lByte=val>>8;
dest[0]= (char)hByte;
dest[1]= (char)lByte;
}
我的问题是:
我如何将(统一)这2个字节转换为一个INT等于"123123"?
要执行与int2bytes
函数相反的操作,只需这样做:
int val = (lByte << 8) | hByte;
虽然,我认为你的变量名是前后颠倒的。我将val&0xff
称为低字节,val >> 8
称为高字节。
你也错误地认为你可以把123123
装进2个字节。2^16是65536
我有一个函数,允许我把一个int值分成2个字节(例如:int"123123"结果在E0F3;highByte= 0xF3 and lowByte=0xE0)
E0F3用十进制表示等于57587。这是你在评论中对我的回答所报告的价值。
现在,十六进制表示的123123
是0x1E0F3
,您至少需要三个字节来存储该值。
Try
(dest[1] << 8) & dest[0]
IMHO的hByte和lByte交换…更重要的是,123123不是一个两字节的值。Int是有符号的,所以两个字节的最大值是32767,但int
(通常)是4字节。
我可能会建议在这种情况下使用union
,因为您可以省去所有的算术运算,并且根本不需要使用显式转换。
使用联合的示例代码:
#include <iostream>
using std::cout;
using std::hex;
using std::dec;
using std::endl;
int main() {
union int2bytes {
unsigned char byte[sizeof(int)];
int val;
};
int2bytes i;
// Convert int to byte
i.val = 123123;
cout << i.val << " : " << hex << i.val << dec << endl;
for (int j = 0; j < sizeof(int); ++j)
cout << "Byte#" << j << " : " << hex << (int)i.byte[j] << dec << endl;
// Convert byte to int
i.byte[1]--;
cout << i.val << " : " << hex << i.val << dec << endl;
}
输出:123123 : 1e0f3
Byte#0 : f3
Byte#1 : e0
Byte#2 : 1
Byte#3 : 0
122867 : 1dff3
Union可以稍微改进一下
union int2bytes {
unsigned char byte[sizeof(int)];
int val;
int2bytes (const int2bytes& i = 0) : val(i.val) {};
int2bytes (int i) : val(i) {};
};
现在这些工作
int2bytes i = 123123;
int2bytes j; // j.val == 0
int2bytes k = i;
j = i;
相关文章:
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 构造<int>具有 2 个字符串文字的向量
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 在c++中获取两个大int,并将它们存储在数组中
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 仅读取文件末尾的最后 3 个字符,并将其另存为 int
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 比较两个整数在C++中与未知 int 类型的相等性
- 如何将具有两个通道的垫子转换为矢量<int><矢量>?
- 为什么 std::error_code 构造函数的第一个参数固定为 int
- 赋值和添加运算符重载(2个表和int的串联)
- 如何在一维数组中的每个元素中都有多个int值
- 命令行参数在不到 3 个 LOC 中 int?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 如何将无符号的 int 值解释为四个字母的单词?
- 视觉C++转换和写入值为 10 的无符号 int 给出 5 个字节
- 将 int32_t 键入为 int 是个好主意吗?