c++ int 与 字节数组互转
时间: 2023-12-21 19:07:34 浏览: 87
要把 int 类型的数转换成字节数组,可以使用强制类型转换和指针来实现。具体的代码如下:
```cpp
int num = 123456; // 要转换的 int 数
unsigned char bytes[4]; // 转换后的字节数组,4 表示 int 类型占用 4 个字节
// 将 int 类型的数转换成字节数组
bytes[0] = (num >> 24) & 0xFF;
bytes[1] = (num >> 16) & 0xFF;
bytes[2] = (num >> 8) & 0xFF;
bytes[3] = num & 0xFF;
```
要把字节数组转换成 int 类型的数,也可以使用强制类型转换和指针来实现。具体的代码如下:
```cpp
unsigned char bytes[] = {0x01, 0xE2, 0x40, 0x00}; // 要转换的字节数组
int num = 0;
// 将字节数组转换成 int 类型的数
num |= bytes[0] << 24;
num |= bytes[1] << 16;
num |= bytes[2] << 8;
num |= bytes[3];
```
需要注意的是,这里使用了位运算符来进行转换,因为 int 类型的数在内存中是以二进制形式存储的。如果字节数组的大小与 int 类型的大小不一致,可能会导致数据截断或溢出等问题。
相关问题
c++ 16进制字节数组转10进制
在C++中,可以使用位运算和强制类型转换来将十六进制字节数组转换为十进制数。根据引用\[2\]和引用\[3\]的示例代码,可以总结出以下两种方法:
方法一:使用位运算和强制类型转换
1. 定义一个十六进制字节数组,例如char hexBuf\[\] = {0x13, 0x14, 0x14, 0x16, 0x17, 0x16, 0x00};
2. 定义一个目标变量,例如unsigned int decimalNum = 0;
3. 使用位运算和强制类型转换将字节数组转换为十进制数,例如:
decimalNum = (((((hexBuf\[0\] << 8) | hexBuf\[1\]) << 8) | hexBuf\[2\]) << 8) | hexBuf\[3\];
4. 最后,decimalNum就是转换后的十进制数。
方法二:使用memcpy和强制类型转换
1. 定义一个十六进制字节数组,例如char hexBuf\[\] = {0x13, 0x14, 0x14, 0x16, 0x17, 0x16, 0x00};
2. 定义一个目标变量,例如unsigned int decimalNum = 0;
3. 使用memcpy将字节数组的前几个字节复制到一个新的char数组中,例如:
char headBuff\[4\];
memcpy(headBuff, hexBuf, 4);
4. 使用强制类型转换将新的char数组转换为十进制数,例如:
decimalNum = *((unsigned int*)headBuff);
5. 最后,decimalNum就是转换后的十进制数。
需要注意的是,以上两种方法都假设字节数组的顺序是按照高位到低位的顺序排列的。如果字节数组的顺序是按照低位到高位的顺序排列的,需要相应地调整位运算的顺序。
#### 引用[.reference_title]
- *1* *2* *3* [C++常见十六进制数组转换char数组方法](https://blog.csdn.net/qq_43376782/article/details/127736693)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
c++ 创建byte 字节数组
在C++中,你可以使用标准库中的`std::vector<char>`或者`char*`数组来存储byte(通常用于表示单个字节)。这里给出两个例子:
1. 使用`std::vector<char>`:
```cpp
#include <vector>
using namespace std;
int main() {
vector<char> byteArray(5); // 创建一个大小为5的byte数组
byteArray[0] = 0x66; // 单个字节赋值
byteArray[1] = 0x40;
byteArray[2] = 0x50;
byteArray[3] = 0xEF;
byteArray[4] = 0x7A;
// 可以通过索引来访问和操作每个元素
cout << static_cast<int>( byteArray[0] ) << endl;
return 0;
}
```
2. 使用`char*`数组:
```cpp
int main() {
char byteArray[5];
byteArray[0] = 0x66;
byteArray[1] = 0x40;
byteArray[2] = 0x50;
byteArray[3] = 0xEF;
byteArray[4] = 0x7A;
// 访问和操作的方式类似
cout << byteArray[0] << endl;
return 0;
}
```
这两个示例都展示了如何创建并初始化一个包含五个字节的byte数组。
阅读全文