CIL и JVM: от младшего к большому порядку байтов в c # и java - PullRequest
0 голосов
/ 27 апреля 2010

Я использую на клиенте C #, где я конвертирую двойные значения в байтовый массив.

Я использую Java на сервере и использую writeDouble и readDouble для преобразования двойных значений в байтовые массивы.

Проблема в том, что двойные значения из java в конце не являются двойными значениями в начале, передающими c #

writeDouble в Java Преобразует двойной аргумент в длинный с помощью метода doubleToLongBits, а затем записывает это длинное значение в базовый выходной поток как 8-байтовое количество, старший байт вначале.

DoubleToLongBits Возвращает представление указанного значения с плавающей запятой в соответствии с битовой компоновкой IEEE 754 "двойной формат".

Программа на сервере ожидает 64-102-112-0-0-0-0-0 из C #, чтобы преобразовать его в 1700.0, но он становится 0000014415464 из c # после того, как c # преобразовал 1700.0

это мой код в 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();
  }

спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Если Endianess не совпадает между системами, вам придется изменить его. Для Double нет встроенных методов в .Net. Так что вы должны сделать это сами:

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

BitConverter также имеет свойство IsLittleEndian, которое можно использовать, чтобы проверить, действительно ли у вас другой порядок байтов.

0 голосов
/ 27 апреля 2010

Джон дает мне решение.

Java подписана от -127 до 127 и C # от 0 до 255. Это работает, когда я использую (sbyte) байт для своих значений в массиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...