Подробности о приложении:

  • Разработано в Visual Studio 2019 (Windows 10)
  • Разработано на платформе UWP с языками C# и XAML

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

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

В настоящее время я использую этот метод для передачи моих переменных в байтах []:

var ID_MESSAGE_ARRAY = BitConverter.GetBytes((int)MESSAGE);
var WAY_ARRAY = BitConverter.GetBytes((int)WAY);
var SIZE_ARRAY = BitConverter.GetBytes((int)SIZE);
var TYPE_STATE_DEVICE_ARRAY = BitConverter.GetBytes((int)TYPE_STATE_DEVICE.LOGIN);

var HexString = ID_MESSAGE_ARRAY.Concat(WAY_ARRAY).Concat(SIZE_ARRAY).Concat(TYPE_STATE_DEVICE_ARRAY).Concat(ABO).ToArray();

В результате этого сообщения я должен отправить string. Поэтому я использую этот метод для кодирования моего string в bytes[]:

string ABONNE = "TEST";
var ABO = Encoding.ASCII.GetBytes(ABONNE);

Но у меня есть проблема, это string должно быть на 32 байтах, тогда как когда я декодирую (hexa) на другой стороне, я нахожу это:

Получен результат: 54-45-53-54

Ожидаемый результат: 54-45-53-54-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

Чтобы найти этот результат, как я могу передать свой string ABONNE в string[32], а затем в bytes[]?

1
Valentin Dubois-Pivot 24 Май 2019 в 11:22

2 ответа

Лучший ответ

Как насчет того, чтобы передать строку в 32-байтовый массив напрямую:

string ABONNE = "TEST";
Byte[] ABO = new byte[32];
Encoding.ASCII.GetBytes(ABONNE,0,ABONNE.Length,ABO,0);

Оба ноля для 0-индекса (начальная позиция). Также я создал пустой массив из 32 байтов, после чего он заполняется байтами из ABONNE. Пожалуйста, будьте осторожны, если Encoding.ASCII.GetBytes(ABONNE).Length больше 32 байт, вы получите исключение

4
ganchito55 24 Май 2019 в 08:38

Используйте StringBuilder, чтобы дополнить вашу строку необходимым количеством нулей.

StringBuilder sb = new StringBuilder(ABONNE);
sb.Append((char)0,32-ABONNE.Length);

Обновлено рабочий пример вместо псевдокода.

-1
montonero 24 Май 2019 в 08:48