|
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
|
|
.NET 4.x Pinvoke определить размер символа в рантайме08.02.2023, 11:50. Показов 704. Ответов 7
Метки нет (Все метки)
Всем привет,
Пишу обертку над библиотекой написанной на delphi или pascal в библиотеке есть универсальный метод который возвращает по указателю массив символов, так же передается из библиотеки количество этих самых символов. Так вот, библиотека может передавать как однобайтовые символы так же и двухбайтовые (ну это которые я отловил) библиотека написана не мной, так же достучаться до создателей библиотеки нет возможности. Собственно вопрос: Можно ли как то в рантайме определить какой массив символов передается, однобайтовый или двухбайтовый, и как это сделать. Эту же библиотеку вызывает приложения написанное на этом же delphi и там это все каким то магическим способом работает.
0
|
|
| 08.02.2023, 11:50 | |
|
Ответы с готовыми решениями:
7
Определить номер последнего символа равного z и добавить после него 4 символа р Дана строка из 13 символов.Определить номер последнего символа равного z идобавить после него 4-ре символа p |
|
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
|
|
| 08.02.2023, 19:37 [ТС] | |
|
Сделал так, так как я точно знаю что по указателю должна быть строка то считываю массив байт в буфер по переданной длине (промахнутся мимо памяти не получится), далее ищу в байтах нулевой байт, если эта строка в однобайтовой кодировке то нуля там по определению быть не должно, если там есть хотя бы 1, а в многобайтовой кодировке чтобы не попался 0 нужно постараться(Вероятность лично в моем случае очень мала) то значит копирую уже все в char и собираю из них строку.
Так как в моем случае я точно знаю что текстом является xml, и эта хml в большинстве своем состоит из латиницы, то на нули напороться гораздо легче, поэтому пока оставлю так, если кто то то знает достоверные способ определения символа в рантайме то буду рад почитать и порассуждать.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 08.02.2023, 20:23 | |
|
0
|
|
|
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
|
|
| 09.02.2023, 08:55 [ТС] | |
|
kolorotur, строка с xml документом, но думаю это не особо и важно так как начинаются они одинаково и в случае с многобайтовыми кодировками в ноль мы прилетим сразу с первого символа.
0
|
|
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,433
|
||
| 09.02.2023, 10:09 | ||
|
И какая вообще задача перед вами стоит?
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 09.02.2023, 15:47 | ||
|
Или используйте уже готовые парсеры — они должны уметь определять кодировку.
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
|
|
|
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
|
|
| 09.02.2023, 18:15 | |
|
Помогаю со студенческими работами здесь
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. . . .
|