簡體   English   中英

CIL和JVM C#和Java中的小端到大端

[英]CIL and JVM Little endian to big endian in c# and java

我在將雙精度值轉換為字節數組的客戶端C#上使用。

我在服務器上使用java,並且使用writeDouble和readDouble將雙精度值轉換為字節數組。

問題是java末尾的double值不是開始給c#的double值

Java中的writeDouble使用doubleToLongBits方法將double參數轉換為long,然后將該long值作為8字節的數量寫入高位字節的基礎輸出流。

DoubleToLongBits根據IEEE 754浮點“雙格式”位布局返回指定浮點值的表示形式。

服務器上的程序正在等待C#將64-102-112-0-0-0-0-0從C#轉換為1700.0,但在c#轉換1700.0之后,他從c#變成了0000014415464

這是我在C#中的代碼:

 class User
  {
    double workingStatus;
public void persist()
   {
     byte[] dataByte;
   using (MemoryStream ms = new MemoryStream())
     {
       using (BinaryWriter bw = new BinaryWriter(ms))
       {

         bw.Write(workingStatus);
         bw.Flush();
         bw.Close();
       }

    dataByte = ms.ToArray();

       for (int j = 0; j < dataByte.Length; j++)
       {

         Console.Write(dataByte[j]);
       }
}
public double WorkingStatus
      {
     get { return workingStatus; }
     set { workingStatus = value; }
      }

}
class Test
{
  static void Main()
  {
    User user = new User();
     user.WorkingStatus = 1700.0;
     user.persist();
  }

感謝您的幫助。

如果系統之間的Endianess不匹配,則必須將其反轉。 對於Double,.Net中沒有內置方法。 因此,您必須自己做:

Array.Reverse(dataByte);
doubleValue = BitConverter.ToDouble(dataByte);

BitConverter還具有IsLittleEndian屬性,可用於檢查您是否確實具有不同的字節序。

約翰給我解決方案。

Java的簽名從-127到127,C#的簽名從0到255。它可以在數組中使用(sbyte)byte作為我的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM