将 4 字节无符号整数转换为 0-127

Convert 4 byte unsigned ints to 0-127

我需要转换从另一个软件收到的一系列值。

它们来自 4 字节整数 (0 - 0xFFFFFFFF),但我想将它们显示为 0-127 的范围。

我不熟悉无符号整数的工作原理。当我尝试从软件内部将该值设置为 127 时,我在我的应用程序中读取到“-16”值。

能否请您解释一下这是如何工作的,或者给我一些相关的资源来学习?

我更喜欢与语言无关的答案,但我碰巧使用了 Javascript。

首先,一个 4 字节的整数可以包含跨越超过 40 亿范围的值。目前尚不清楚您打算如何用 0-127 的范围来表示这些。如果可以保证来自其他程序的值始终在 0-127 范围内,那么这当然不会成为问题。但是,您需要考虑当收到更大的值(或负值)时会发生什么。

其次,整数可以是有符号的或无符号的。一个 8 位变量(一个字节)可以有符号范围 -128 到 127 或无符号范围 0 到 255。(这可能代表实际数字,或者可能是 ASCII 字符或 bit-field 或任何其他数量的东西.你必须提前知道这个值代表什么,是有符号的还是无符号的。)

让我们假设它只是代表一个数字。如果它是有符号数,则最高有效位将为负数设置并为正数清除。对于无符号整数,最高有效位与任何其他位相同。

继续使用 8 位字节,0b10000001 的值将是:
无符号:129
签名:-127
0b00000001 的值将始终为 1,无论该值是有符号还是无符号。互联网上将有大量讨论此主题的教程。

第三,您需要知道您收到的 4 个字节是“little-endian”还是“big-endian”。换句话说,当你得到第一个字节时,这是最高有效字节还是最低有效字节?如果你以错误的方式解决这个问题,那么结果数字将毫无意义。

在给出任何有意义的答案之前,您需要提供更多信息。尽管如此,我希望我能够为您指明正确的方向。