void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) { Des.push_back(nNum >> 0); Des.push_back(nNum >> 1*8); Des.push_back(nNum >> 2*8); Des.push_back(nNum >> 3*8); } 怎么用?
时间: 2024-03-19 07:43:18 浏览: 125
这是一个将32位整数转换为4个8位整数的函数,可以按照以下步骤使用它:
1. 创建一个空的vector<uint8_t>,存储转换后的8位整数。
2. 调用函数Convert_32Bits_To_8Bits,并将第一个参数设置为上一步创建的vector,将第二个参数设置为要转换的32位整数。
3. 最终,vector中将包含4个8位整数,分别对应32位整数的4个字节。
示例代码如下:
```
vector<uint8_t> result;
uint32_t num = 0xABCD1234;
Convert_32Bits_To_8Bits(result, num);
// 打印转换后的8位整数
for (int i = 0; i < result.size(); i++) {
cout << hex << setw(2) << setfill('0') << (int)result[i] << " ";
}
// 输出:34 12 CD AB
```
相关问题
这个函数能够将uint32_t 类型的数据转为vector<uint8_t>,是否正确,void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) { Des.push_back(nNum >> 0); Des.push_back(nNum >> 18); Des.push_back(nNum >> 28); Des.push_back(nNum >> 3*8); }
这个函数是不正确的。它将32位的数据分为4个部分,每个部分只取了部分位数,然后将它们分别存储在了vector中。但是这样存储的顺序是错误的,应该是按照从低位到高位的顺序存储。同时,这个函数只能处理32位的数据,而不能处理其他位数的数据。正确的实现应该是:
```
void Convert_32Bits_To_8Bits(vector<uint8_t>& Des,uint32_t nNum) {
Des.push_back(nNum & 0xFF);
Des.push_back((nNum >> 8) & 0xFF);
Des.push_back((nNum >> 16) & 0xFF);
Des.push_back((nNum >> 24) & 0xFF);
}
```
这个函数将32位的数据按照从低位到高位的顺序,分为4个部分,每个部分都取了8位,并且将它们存储在vector中。这个函数可以处理任何32位的数据。
inline void Convert_8Bits_To_32Bits(vector<uint8_t>& Des,uint32_t &nNum) { nNum = Des.at(0) << 0; nNum |= Des.at(1) << 1*8; nNum |= Des.at(2) << 2*8; nNum |= Des.at(3) << 3*8; Des.erase(Des.begin(),Des.begin()+4); }
这段代码的作用是将一个长度为4的vector<uint8_t>转换成一个uint32_t类型的数。具体来说,它将输入vector中的前4个元素(即下标为0到3的元素)分别左移0、8、16、24位,然后按位或运算合并成一个uint32_t类型的数,存储在nNum中。最后,它将输入vector中前4个元素删除。这段代码使用了C++的STL库中的vector容器,其中at()方法用于获取vector中指定下标的元素,erase()方法用于删除vector中指定范围的元素。
阅读全文