2009-02-26 2 views
1

У меня есть структура следующим образом:Как преобразовать массив байтов в строку?

данные структуры {int no; имя строки; int id};

Я преобразовываю эту структуру в bytearray. Мне нужно преобразовать это обратно в формат структуры. Для этого мне нужно преобразовать первые члены в целое число и строку. Как преобразовать bytearray в структуру?

+1

Какой язык/архитектура? Ответ на C++ и ответ C# /. NET будут выглядеть совсем по-другому! –

ответ

1

Проверьте класс BitConverter. Вот пример how to convert byte array to int.

Для преобразования строк BitConverter не очень полезно (как отмечает Марк в своем комментарии), хотя у него есть метод ToChar(). Вы можете использовать ASCIIEncoding, UTF8Encoding или любые другие классы XxxEncoding в пространстве имен System.Text.

Примечание, это .Net специфический.

+0

BitConverter не поможет вам со строками; и вы должны быть очень осторожны в отношении endianness (поскольку BitConverter использует конечную точку CPU, а не фиксированную консистенцию, такую ​​как порядок сетевого байта). –

+0

Технически, BitConverter имеет ToChar(), который позволяет преобразовать в строку. Не лучший подход, согласен. –

+0

BitConverter для Ints, а затем Encoding.GetString() для строк. Для Encoding.GetString() может потребоваться управление терминатором nul. – Cheeso

1

Хорошо, что ответ действительно зависит от того, как вы преобразовываете структуру в массив байтов. Теоретически вам нужно будет выполнить те же шаги в обратной последовательности!

Например, если вы сериализовать структуру таким образом, что:

  • первых 4 байта = нет
  • вторых 4 байта = Id
  • байт остальных = байты потоки символов в имени

Затем, чтобы преобразовать массив байтов в структуру, вам просто нужно определить переменную этого типа структуры и назначить членам значения, преобразованные из массива байтов!

1

Обратите внимание, что на многих платформах имеются инструменты для этой цели; в то время как вы можете написать пользовательский [de] код сериализации, он может стать утомительным очень быстро.

Например, protocol buffers - это язык-агностикский механизм для описания формата проводов. Вы можете технически получить лучше (меньше) сериализации, если вы сделаете все вручную, но это будет намного больше работы ...

* = C++, Java и т.д. в репо Google - плюс lots more сообществом

Смежные вопросы