gpt4 book ai didi

c++ - 将 2 字节数分成两个 1 字节

转载 作者:行者123 更新时间:2023-11-30 02:16:27 27 4
gpt4 key购买 nike

我试图将一个 2 字节的数字分成两个 1 字节的数字。但是我得到了错误的结果。假设数字是:0x1234H

uint8_t high = 0;
uint8_t low = 0;

high = static_cast<uint8_t >(val & 0xFF);
low = static_cast<uint8_t >(val >> 8);

cout << std::bitset<8>(high) << endl;
cout << std::bitset<8>(low) << endl;

cout << "high byte: " << static_cast<int >(high) << endl;
cout << "low byte: " << static_cast<int >(low) << endl;

当我运行代码时,我希望得到以下输出:

0x1234
00001100
00010010
high byte: 12
low byte: 34

然而我却得到了,

0x1234
00110100
00010010
high byte: 34
low byte: 12

为什么我的尝试失败了?

最佳答案

那是因为你在这些行中错误地命名了变量...

high = static_cast<uint8_t >(val & 0xFF);
low = static_cast<uint8_t >(val >> 8);

>>> 运算符将位从高位位置向下移动到低位位置。如果您必须将这些位向下移动以保留它们(在转换中),那是因为它们最初不是低位。所以……

low = static_cast<uint8_t >(val & 0xFF);
high = static_cast<uint8_t >(val >> 8);

顺便说一句 - 当您转换为 uint8_t 时,按位和运算符是多余的 - 这已经足以丢弃除低字节以外的所有字节。它仍然是正确的,只是没有必要。

关于c++ - 将 2 字节数分成两个 1 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com