首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# BitConverter问题

C# BitConverter问题
EN

Stack Overflow用户
提问于 2011-12-03 15:57:56
回答 2查看 1.5K关注 0票数 3

例如,如果你想在字节数组中表示5,它将是类似于{0x00,0x00,0x00,0x05}的smth,但是BitConverter给了我反转的数组({0x05,0x00,0x00,0x00})为什么是这样,我错了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-03 16:06:01

很可能您使用的是小端架构(常见的x86和x86-64架构就是这种情况)。您可以使用BitConverter.IsLittleEndian属性验证这一点。在这样的体系结构中,最低有效字节首先出现,这就解释了为什么

代码语言:javascript
复制
BitConverter.GetBytes(5)

产生

代码语言:javascript
复制
{ 0x05, 0x00, 0x00, 0x00 }

当然,如果需要,您可以根据系统/目标字节顺序反转数组。您可以找到这样一个列出了EndianBitConverterhere

票数 3
EN

Stack Overflow用户

发布于 2017-11-24 01:11:23

我编写了以下包装类来处理BitConverter期望Little Endien的情况。

代码语言:javascript
复制
    public static Int16 ToInt16(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt16(BitConverter.IsLittleEndian ? data.Skip(offset).Take(2).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt16(data, offset);
    }

    public static Int32 ToInt32(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt32(BitConverter.IsLittleEndian ? data.Skip(offset).Take(4).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt32(data, offset);
    }

    public static Int64 ToInt64(byte[] data, int offset)
    {
        if (BitConverter.IsLittleEndian)
        {
            return BitConverter.ToInt64(BitConverter.IsLittleEndian ? data.Skip(offset).Take(8).Reverse().ToArray() : data, 0);
        }
        return BitConverter.ToInt64(data, offset);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8366398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档