Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Структуры из языка Си (https://javascript.ru/forum/node-js-io-js/82496-struktury-iz-yazyka-si.html)

win32s 16.05.2021 19:30

Структуры из языка Си
 
Возникла необходимость реализовать на javascript обработку некоторых бинарных данных; попросту говоря - переписать код из Си на JS. Вопрос - как удобнее всего записать Сишную структуру на Javascript? Может есть какие-то примеры

допустим код вида
Код:

_ioh {
  int16 Magic;
  int8                MajorLinkerVersion;
  int8                MinorLinkerVersion;
  int32                SizeOfCode;
  int32                SizeOfInitializedData;
  int32                SizeOfUninitializedData

Как его записать?
Нашел какой-то ctype, но пишут что он устарел

voraa 16.05.2021 20:04

Такие бинарные данные надо обрабатывать типизированными массивами
https://developer.mozilla.org/ru/doc...t/Typed_arrays

win32s 17.05.2021 00:02

Цитата:

Сообщение от voraa (Сообщение 536657)
типизированными массивами

Спасибо, похоже то что надо! 2 вопроса только:
1) если я хочу задать строку (в примере там
var usernameView = new Uint8Array(buffer, 4, 16);
, т.е char[] ) я просто пишу
Код:

usernameView  = "SomeUserName";
?
Или должен использовать спец функции?
А если выйду за границу массива , что будет? Оно перезапишет следующий элемент или вылетит с ошибкой?

2) это актуально только для NODE JS или можно использовать и в браузерах?

voraa 17.05.2021 08:13

Цитата:

Сообщение от win32s
А если выйду за границу массива , что будет? Оно перезапишет следующий элемент или вылетит с ошибкой?

Вылетит с ошибкой.

Со строками сложнее. В JS всегда используется юникод. Символ в строке занимает 2 байта (для большинства символов. Иногда 4 байта).
И если из каких то кодировок можно преобразовать в строки JS используя TextDecoder (https://developer.mozilla.org/en-US/...PI/TextDecoder), то обратного преобразования нет. Из строк JS преобразователь , например в Win-1251, придется писать вручную (или искать библиотеки)


Часовой пояс GMT +3, время: 04:58.