【问题标题】:Java and C# - byte array to long conversion differenceJava 和 C# - 字节数组到长转换的区别
【发布时间】:2010-02-18 14:48:06
【问题描述】:

这对我来说很奇怪: 当我在 Java 中运行时

byte[] data = new byte[] { 50, -106, 40, -22, -94, -119, -52, 8 };
ByteBuffer bb = ByteBuffer.wrap( data );
System.out.println( bb.getLong() );

结果是 3645145936617393160

当我在 C# 中运行时

//unsigned values (signed&0xff)
byte[] bytes = new byte[] { 50, 150, 40, 234, 162, 137, 204, 8 };
long l = BitConverter.ToInt64(bytes, 0);
System.Console.Write(String.Format("{0}\n", l));
System.Console.ReadKey();

结果是 634032980358633010

你能帮我理解一下吗?
谢谢!

【问题讨论】:

    标签: c# java numbers bytearray


    【解决方案1】:

    这是endianness 的区别。

    如果你反转字节数组,它会按预期工作:

    BitConverter.ToInt64(new byte[] { 8, 204, 137, 162, 234, 40, 150, 50 }, 0)
    

    您可以通过调用bb.order(ByteOrder.LITTLE_ENDIAN) 在Java 中设置字节序。

    顺便说一句,玩这些东西最简单的方法是使用LINQPad

    【讨论】:

    • 具体来说,Java 在内部将事物存储为 Big Endian,而 x86 处理器是 Little Endian……并且大概 .NET 的设计反映了这一点。
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多