Преобразовать строку в строку [], а затем преобразовать строку [] в байт [] - PullRequest
1 голос
/ 24 мая 2019

Подробная информация о приложении:

  • Разработано в 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[]?

Ответы [ 2 ]

4 голосов
/ 24 мая 2019

Как насчет того, чтобы передать строку в 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 байт, вы получите исключение

0 голосов
/ 24 мая 2019

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

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

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

...