2010-04-27 5 views
0

J'utilise sur le client C# où je convertis des valeurs doubles en tableau d'octets. J'utilise java sur le serveur et j'utilise writeDouble et readDouble pour convertir des valeurs doubles en tableaux d'octets.CIL et JVM Little endian à big endian en C# et java

Le problème est le double des valeurs de java à la fin ne sont pas les doubles valeurs à commencer à donner à C#

writeDouble en Java Converti double argument à un long en utilisant la méthode doubleToLongBits, puis écrit ce long valeur au flux de sortie sous-jacent en tant que quantité de 8 octets, octet haut en premier.

DoubleToLongBits Renvoie une représentation de la valeur à virgule flottante spécifiée conformément à la disposition des bits en "double format" à virgule flottante IEEE 754.

Le programme sur le serveur est en attente de 64-102-112-0-0-0-0-0 de C# pour le convertir en 1700,0 mais il Sí devenir 0000014415464 de C# après C# converti 1700,0

cette est mon code en 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(); 
    } 

merci pour l'aide.

Répondre

2

Si l'Endianess ne correspond pas entre les systèmes, vous devrez l'inverser. Pour Double, il n'y a pas de méthodes intégrées dans .Net. Donc, vous devez le faire vous-même:

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

BitConverter a également une propriété IsLittleEndian que vous pouvez utiliser pour vérifier si vous avez vraiment différent endianess.

0

John me donne la solution.

Java est signé -127 à 127 et C# de 0 à 255. Il fonctionne wenn J'utilise (sbyte) octet pour mes valeurs dans le tableau

Questions connexes