位运算,位脱落,适合8位容器
Bitwise operations, bits falling off, fit into 8 bit container
我正在尝试将 16、32 和 64 位值放入 8 位容器
我可以将这些位移动到容器只有 8 位数据的位置,但我不知道如何将它们带回以反映值。整天绞尽脑汁想不通。任何帮助都会非常棒。这是我在开始我的实验室项目之前一直在试验的代码,因为这是让我感到困惑的事情。我将如何存储 8 位然后返回并能够在不丢失位的情况下将其拉回
#include <iostream>
#include <stdio.h>
#include <cstdint>
using namespace std;
int main()
{
const int MAX_SIZE = 1000;
uint16_t data = 62153;
uint8_t mem[MAX_SIZE];
cout << data << endl;
data = ( data >> 8) & 0xff;
cout << data << endl;
data = ( data << 8);
cout << data << endl;
return 0;
}
输出为:
1111 0010 1100 1001 = 62153
1111 0010 = 242 after bit shift
1111 0010 0000 0000 = 61952 shift back
那些位已经消失了,我如何通过分解这些位来保存 space 以便能够将它们存储在一个较小的容器中,同时仍然能够让一个函数返回并读取完整的内容价值是在转变之前。这是家庭作业,所以我不要求答案。向正确的方向推动将不胜感激。
这应该会给你一个 A 方向的推动力。您也可以使用堆栈来实现类似的目的。通过使用向量,您可以通过检查向量的大小来确定输出是什么。例如,如果 vector::size() == 2
你知道你需要创建一个新的 uint16_t
。如果矢量大小为 4,则需要 uint32_t
等...
#include <vector>
#include <cstdint>
#include <iostream>
int main()
{
std::vector<uint8_t> bytes;
uint16_t data = 62153;
uint8_t lsb = data & 0xff;
uint8_t msb = (data >> 8) & 0xff;
bytes.push_back(lsb);
bytes.push_back(msb);
uint16_t new_data = 0;
new_data = new_data | (bytes.at(1) << 8);
new_data = new_data | bytes.at(0);
std::cout << new_data << std::endl;
return 0;
}
我正在尝试将 16、32 和 64 位值放入 8 位容器
我可以将这些位移动到容器只有 8 位数据的位置,但我不知道如何将它们带回以反映值。整天绞尽脑汁想不通。任何帮助都会非常棒。这是我在开始我的实验室项目之前一直在试验的代码,因为这是让我感到困惑的事情。我将如何存储 8 位然后返回并能够在不丢失位的情况下将其拉回
#include <iostream>
#include <stdio.h>
#include <cstdint>
using namespace std;
int main()
{
const int MAX_SIZE = 1000;
uint16_t data = 62153;
uint8_t mem[MAX_SIZE];
cout << data << endl;
data = ( data >> 8) & 0xff;
cout << data << endl;
data = ( data << 8);
cout << data << endl;
return 0;
}
输出为:
1111 0010 1100 1001 = 62153
1111 0010 = 242 after bit shift
1111 0010 0000 0000 = 61952 shift back
那些位已经消失了,我如何通过分解这些位来保存 space 以便能够将它们存储在一个较小的容器中,同时仍然能够让一个函数返回并读取完整的内容价值是在转变之前。这是家庭作业,所以我不要求答案。向正确的方向推动将不胜感激。
这应该会给你一个 A 方向的推动力。您也可以使用堆栈来实现类似的目的。通过使用向量,您可以通过检查向量的大小来确定输出是什么。例如,如果 vector::size() == 2
你知道你需要创建一个新的 uint16_t
。如果矢量大小为 4,则需要 uint32_t
等...
#include <vector>
#include <cstdint>
#include <iostream>
int main()
{
std::vector<uint8_t> bytes;
uint16_t data = 62153;
uint8_t lsb = data & 0xff;
uint8_t msb = (data >> 8) & 0xff;
bytes.push_back(lsb);
bytes.push_back(msb);
uint16_t new_data = 0;
new_data = new_data | (bytes.at(1) << 8);
new_data = new_data | bytes.at(0);
std::cout << new_data << std::endl;
return 0;
}