Фиксированная / переменная структура длины в c # и преобразование с прямым порядком байтов - PullRequest
1 голос
/ 25 февраля 2010
Struct {
 byte F1[2]
 SHORT F2
 byte F3[512]
} BPD


CBD
{
 SHORT CLENGTH
 byte DATA[]
}

Выше 2 структуры c ++. Здесь SHORT имеет 2 байта со знаком. Как лучше всего конвертировать его в C #?

(Обратите внимание, что во 2-й строке длина DATA не определена.)

Я видел следующие две ссылки.

Строки или структуры фиксированной длины в C #

и

Чтение структуры данных C / C ++ в C # из байтового массива

После прочтения данных в структуру мне нужно преобразовать короткую переменную в старший порядок байтов. (реверсивные байты).

Ответы [ 2 ]

0 голосов
/ 05 марта 2010

Решил сам.

Структуры хороши, но если вы не собираетесь изменять какие-либо классы данных, лучше использовать. У меня есть создать классы в C # для структуры C ++ и для преобразования в обратный порядок байтов, я создал 3 библиотечные функции, и это работает для меня.

Спасибо всем за ценный вклад.

0 голосов
/ 26 февраля 2010

Требуется преобразовать только «короткий». Массив байтов, идентичный на большой / младшей платформе с прямым порядком байтов.

Итак, просто прочитайте структуры и сделайте что-то вроде этого:

data.F2 = ((uint) data.F2 >> 8) | (((uint) data.F2 & 0xFF) << 8); </p>

и

data.CLENGTH = ((uint) data.CLENGTH >> 8) | (((uint) data.CLENGTH & 0xFF) << 8); </p>

...