[英]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.