Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
.NET 4.x

Pinvoke определить размер символа в рантайме

08.02.2023, 11:50. Показов 704. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,
Пишу обертку над библиотекой написанной на delphi или pascal
в библиотеке есть универсальный метод который возвращает по указателю массив символов, так же передается из библиотеки количество этих самых символов.
Так вот, библиотека может передавать как однобайтовые символы так же и двухбайтовые (ну это которые я отловил) библиотека написана не мной, так же достучаться до создателей библиотеки нет возможности.
Собственно вопрос:
Можно ли как то в рантайме определить какой массив символов передается, однобайтовый или двухбайтовый, и как это сделать.
Эту же библиотеку вызывает приложения написанное на этом же delphi и там это все каким то магическим способом работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2023, 11:50
Ответы с готовыми решениями:

Std::aligned_storage но что бы размер можно было указать в рантайме
std::aligned_storage требует что бы размер данных был указан при помощи шаблонного параметра, а значит на этапе компиляции. Но мне нужно...

Определить номер последнего символа равного z и добавить после него 4 символа р
Дана строка из 13 символов. Определить номер последнего символа равного z и добавить после него 4 символа р.

Дана строка из 13 символов.Определить номер последнего символа равного z идобавить после него 4-ре символа p
дана строка из 13 символов.Определить номер последнего символа равного z идобавить после него 4-ре символа p Пожалуйсто помогите...

7
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
08.02.2023, 19:37  [ТС]
Сделал так, так как я точно знаю что по указателю должна быть строка то считываю массив байт в буфер по переданной длине (промахнутся мимо памяти не получится), далее ищу в байтах нулевой байт, если эта строка в однобайтовой кодировке то нуля там по определению быть не должно, если там есть хотя бы 1, а в многобайтовой кодировке чтобы не попался 0 нужно постараться(Вероятность лично в моем случае очень мала) то значит копирую уже все в char и собираю из них строку.
Так как в моем случае я точно знаю что текстом является xml, и эта хml в большинстве своем состоит из латиницы, то на нули напороться гораздо легче, поэтому пока оставлю так, если кто то то знает достоверные способ определения символа в рантайме то буду рад почитать и порассуждать.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2023, 20:23
Цитата Сообщение от Andreyip Посмотреть сообщение
в моем случае я точно знаю что текстом является xml
XML документ или XML элемент?
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
09.02.2023, 08:55  [ТС]
kolorotur, строка с xml документом, но думаю это не особо и важно так как начинаются они одинаково и в случае с многобайтовыми кодировками в ноль мы прилетим сразу с первого символа.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,433
09.02.2023, 10:09
Цитата Сообщение от Andreyip Посмотреть сообщение
в библиотеке есть универсальный метод который возвращает по указателю массив символов, так же передается из библиотеки количество этих самых символов.
А кто\что должно быть клиентом этой библиотеки? Как оно узнаёт тип массива?

И какая вообще задача перед вами стоит?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.02.2023, 15:47
Цитата Сообщение от Andreyip Посмотреть сообщение
строка с xml документом
Ну значит там, наверное, есть заголовок с указанием кодировки?
Или используйте уже готовые парсеры — они должны уметь определять кодировку.
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
09.02.2023, 16:24  [ТС]
kolorotur, для того чтобы прочитать заголовок нужно собрать xml для того чтобы собрать xml нужно прочитать строку, или хотя бы понять размер символа чтобы правильно вычитать буфер.
в общем есть функция что то типо GetInfo(void** outData,int * outLen);
При этом в outLen это количество символов, а не байт, так что загрузить тот же XmlDocument из массива байт не выйдет.
Если читать это как байты то в многобайтовой кодировке получится недостаточное количество символов.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.02.2023, 18:15
Andreyip, Andreyip, делайте как это описано в стандарте XML: кодировку можно определить по первым 5-и байтам (не символам!). Если кодировка однобайтовая, то читаете заголовок до конца и смотрите атрибут encoding.
https://www.w3.org/TR/REC-xml/#sec-guessing
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2023, 18:15
Помогаю со студенческими работами здесь

Определить размер предмета, если известен размер его изображения на экране
Экран помещен на расстоянии l = 1 м от предмета. Между предметом и экраном помещена собирающая линза на расстоянии a = 20 см от предмета....

Размер экрана, вывод символа
Люди помогите написать такую программу: составить программу установки режима и размера экрана вывод символа с использованием прерывания INT...

Размер символа перехода на новую строку
Программа записывает в файл, а потом читает структуру такого типа: // размеры в файле #define SC 20 // страна #define ST 3 // тип ...

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

Определить позицию первого символа "a" в тексте и вывести на экран строку, начиная с этого символа
Здравствуйте. Имеется задача: Задан текст. Определить позицию первого символа "a" в тексте и вывести на экран строку, начиная...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru