Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.05.2021, 19:30
Аспирант
Отправить личное сообщение для win32s Посмотреть профиль Найти все сообщения от win32s
 
Регистрация: 28.09.2019
Сообщений: 38

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

допустим код вида
Код:
_ioh {
  int16 Magic;
  int8                 MajorLinkerVersion;
  int8                MinorLinkerVersion;
  int32                SizeOfCode;
  int32                SizeOfInitializedData;
  int32                SizeOfUninitializedData
Как его записать?
Нашел какой-то ctype, но пишут что он устарел
Ответить с цитированием
  #2 (permalink)  
Старый 16.05.2021, 20:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

Такие бинарные данные надо обрабатывать типизированными массивами
https://developer.mozilla.org/ru/doc...t/Typed_arrays
Ответить с цитированием
  #3 (permalink)  
Старый 17.05.2021, 00:02
Аспирант
Отправить личное сообщение для win32s Посмотреть профиль Найти все сообщения от win32s
 
Регистрация: 28.09.2019
Сообщений: 38

Сообщение от voraa Посмотреть сообщение
типизированными массивами
Спасибо, похоже то что надо! 2 вопроса только:
1) если я хочу задать строку (в примере там
var usernameView = new Uint8Array(buffer, 4, 16);
, т.е char[] ) я просто пишу
Код:
usernameView  = "SomeUserName";
?
Или должен использовать спец функции?
А если выйду за границу массива , что будет? Оно перезапишет следующий элемент или вылетит с ошибкой?

2) это актуально только для NODE JS или можно использовать и в браузерах?
Ответить с цитированием
  #4 (permalink)  
Старый 17.05.2021, 08:13
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,712

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор языка и сайта Мявчик Мявчине Javascript под браузер 3 02.01.2019 19:04
Взаимосвязанные селекты с выбором серии и языка Антоха Общие вопросы Javascript 5 30.09.2015 01:42
нужны топ программисты с отличным знанием языка Node.JS . Nadincoles Работа 0 25.09.2014 16:56
скрипт выбора языка страницы не работает в ie savva jQuery 0 13.04.2011 11:05
рекурентные структуры Злобный Кыс Общие вопросы Javascript 1 07.03.2008 23:54