高字节和低字节如何使用?
我试图用 2 个字节来表示 32768。对于高字节,我是否使用与低字节相同的值,并且它会对它们进行不同的解释,还是我输入实际值?那么我会放一些类似的东西吗 32678 0 还是 256 0?或者两者都不是?任何帮助表示赞赏。
I am trying to represent 32768 using 2 bytes. For the high byte, do I use the same values as the low byte and it will interpret them differently or do I put the actual values? So would I put something like
32678 0 or 256 0? Or neither of those? Any help is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在十六进制中,您的数字是 0x8000,即 0x80 和 0x00。
要从输入中获取低字节,请使用 low=input & 0xff 并获取高字节,请使用
high=(input>>8) & 0xff
。从低字节和高字节中获取输入,如下所示:
input=low | (高<<8)
。确保您使用的整数类型足够大来存储这些数字。在 16 位系统上,
unsigned int
/short
或signed
/unsigned long
应足够大。In hexadecimal, your number is 0x8000 which is 0x80 and 0x00.
To get the low byte from the input, use
low=input & 0xff
and to get the high byte, usehigh=(input>>8) & 0xff
.Get the input back from the low and high byes like so:
input=low | (high<<8)
.Make sure the integer types you use are big enough to store these numbers. On 16-bit systems,
unsigned int
/short
orsigned
/unsigned long
should be be large enough.字节只能包含 0 到 255 之间的值(含 0 和 255)。 32768就是0x8000,所以高字节是128,低字节是0。
Bytes can only contain values from 0 to 255, inclusive. 32768 is 0x8000, so the high byte is 128 and the low byte is 0.
试试这个功能。
将 Hi_Byte 和 Lo_Byte 传递给函数,它以 Word 形式返回值。
Try this function.
Pass your Hi_Byte and Lo_Byte to the function, it returns the value as Word.
指针可以轻松做到这一点,比移位快得多,并且不需要处理器数学运算。
检查这个答案
但是:
如果我理解你的问题,你需要最多 32768 存储在 2 个字节中,所以你需要 2 个无符号整数,或 1 个无符号长整型。
只需将 int 更改为 long,将 char 更改为 int,就可以了。
Pointers can do this easily, are MUCH FASTER than shifts and requires no processor math.
Check this answer
BUT:
If I understood your problem, you need up to 32768 stored in 2 bytes, so you need 2 unsigned int's, or 1 unsigned long.
Just change int for long and char for int, and you're good to go.
32768 是 0x8000,因此您可以将 0x80 (128) 放入高字节,将 0 放入低字节。
当然,这是假设无符号值。 32768 实际上并不是带符号的 16 位值的合法值。
32768 is 0x8000, so you would put 0x80 (128) in your high byte and 0 in your low byte.
That's assuming unsigned values, of course. 32768 isn't actually a legal value for a signed 16-bit value.
在小端平台上,十六进制的 32768 是 0080。 “高”(在我们的例子中是第二个)字节包含 128,“低”字节包含 0。
32768 in hex is 0080 on a little-endian platform. The "high" (second in our case) byte contains 128, and the "low" one 0.