将 uint16_t 变量拆分为 2 uint8_t 个变量
Split uint16_t variable into 2 uint8_t variables
我正在尝试将一个 16 位变量拆分为两个 8 位字节,但我编写的代码似乎无法正常工作:
#include <iostream>
using namespace std;
int main() {
uint16_t value = 0x1234;
uint8_t high = (uint8_t)((value & 0xFF00) >> 8);
uint8_t low = (uint8_t)(value & 0x00FF);
cout<<"higher is "<<hex<<high<<endl;
cout<<"lower is "<<hex<<low<<endl;
return 0;
}
变量high和low声明为uint8_t时,结果不正确。但是,当我将这两个变量声明为 uint16_t 时,它们的结果是正确的。请帮助我理解为什么会这样,或者我如何将这两个字节存储为 uint8_t 变量。谢谢!
When the variables high and low are declared as uint8_t, the result is incorrect.
拆分的“结果”没有错。
输出可能与您预期的不同,因为 std::uint8_t
是字符类型 (unsigned char
) 的别名,并且字符流对字符类型的处理方式与其他整数类型不同。您可以通过转换为另一种整数类型来获得数字表示。示例:
std::cout << "higher is " << std::hex << static_cast<unsigned>(high) << '\n';
P.S。在这种情况下,“高”和“低”是模棱两可的。我建议调用最重要/更重要的八位字节,而不是调用最不重要/最不重要的八位字节。您所说的“高”实际上可能是较低内存地址中的字节(这取决于系统,但在小端的 x86 系统上就是这种情况)。
我正在尝试将一个 16 位变量拆分为两个 8 位字节,但我编写的代码似乎无法正常工作:
#include <iostream>
using namespace std;
int main() {
uint16_t value = 0x1234;
uint8_t high = (uint8_t)((value & 0xFF00) >> 8);
uint8_t low = (uint8_t)(value & 0x00FF);
cout<<"higher is "<<hex<<high<<endl;
cout<<"lower is "<<hex<<low<<endl;
return 0;
}
变量high和low声明为uint8_t时,结果不正确。但是,当我将这两个变量声明为 uint16_t 时,它们的结果是正确的。请帮助我理解为什么会这样,或者我如何将这两个字节存储为 uint8_t 变量。谢谢!
When the variables high and low are declared as uint8_t, the result is incorrect.
拆分的“结果”没有错。
输出可能与您预期的不同,因为 std::uint8_t
是字符类型 (unsigned char
) 的别名,并且字符流对字符类型的处理方式与其他整数类型不同。您可以通过转换为另一种整数类型来获得数字表示。示例:
std::cout << "higher is " << std::hex << static_cast<unsigned>(high) << '\n';
P.S。在这种情况下,“高”和“低”是模棱两可的。我建议调用最重要/更重要的八位字节,而不是调用最不重要/最不重要的八位字节。您所说的“高”实际上可能是较低内存地址中的字节(这取决于系统,但在小端的 x86 系统上就是这种情况)。