Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
signed\unsigned byte
#1
Столкнулся я с такой проблемой. Пишу клиент-серверное приложение. Клиент - на сишарпе, сервер - на джаве. Есть функция, меняющая значения байтов в массиве. На шарпе:

Код:
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            byte[] bytes = encoding.GetBytes("line");

            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] += (byte) (234 / (2 + i));
                Console.WriteLine(bytes[i]);
            }
            return encoding.GetString(bytes);

После чего, из полученных байтов генерируется строка и отсылается серверу. Сервер же должен произвести обратную функцию и восстановить исходный текст.

Код:
        byte[] bytes = data.getBytes();
        for(int i = 0; i < bytes.length; i++)
        {
            bytes[i] -= (234 / (2 + i));
        }
        
        return new String(bytes);

Но, видимо, из-за того, что на шарпе байты беззнаковые, а на джаве знаковые - строка дешифруется неверно.
Подскажите как здесь быть.
Ответ
#2
Код:
bytes[i] = (byte) (bytes[i] - (234 / (2 + i)) & 0xFF);
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Ответ
#3
Во-вторых. Если вы используете в C# string.toByte() то у вас количество байт будет зависить от культуры. В Java new String(byte [] ) так же зависит от использованной кодировки. Т.е. если у вас с C# однобайтовая культура, а в Java кодировка UTF8, то бардак-с получится
Ответ
#4
Спасибо, ребят Smile
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)