首页 > 解决方案 > 为什么将 4 个字节转换为 int 时我没有得到正确的值

问题描述

所以我目前正在学习小端、大端、十六进制和二进制。目前我有这个字节数组,以十六进制表示new byte[] { 0x06, 0x1B, 0x0A, 0xFF };,如果我尝试获取 int 值,通过使用 little endian 读取它

int theValue = BitConverter.ToInt32(arr.Reverse().ToArray(), 0);

它给了我正确的价值,即102,435,583

但是..如果我删除.Reverse().ToArray()又名读取它为大端,它会给我一个负值,因为从技术上讲它超过了整数的最大值。我想要得到的值是4,283,488,352..我想我可以通过这样做将它转换为一个 uint,所以 uint theValue = (uint)BitConverter.ToInt32(arr, 0);我得到了这个值4,278,852,358,你可以看到它是不正确的..它很接近但不正确,我有人告诉我这是因为有些东西溢出了,但我不确定这意味着什么。

为什么我没有得到价值4,283,488,352,而是不同的(错误的)价值4,278,852,358

标签: c#.netbyteendiannessinteger-overflow

解决方案


推荐阅读