реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Текстовая строка без нулевого байта, как избавиться от terminating null?
sonycman
сообщение Jun 21 2009, 14:35
Сообщение #16


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(sensor_ua @ Jun 21 2009, 17:40) *
Если это единый текстовый "блок", то может быть удобной передача его как одной строки.
Тогда можно записать это одной строкой, но "не совсем обычным способом"(С) (дальше было "- в кредит и за советские рубли"):
Код
const char descriptor[]=
"Строка 1"
"Строка 2"
"Прибамбас"
"Фишечка";

Прикольно smile.gif

Нет, там не только текст, ещё байт длины и байт типа дескриптора.
Вообще не очень удобно в Си (и в Си++) со структурами, в которых данные могут иметь различную длину, не известную на момент декларирования структуры, но известную после присваивания ей значения.
Язык требует указания точного значения прямо во время декларирования...
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jun 21 2009, 15:07
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Вообще не очень удобно в Си (и в Си++) со структурами, в которых данные могут иметь различную длину, не известную на момент декларирования структуры, но известную после присваивания ей значения.
Язык требует указания точного значения прямо во время декларирования...

Насчёт плюсов не скажу, но не был бы так категоричен. В Си действительно с этим сложновато. В C99 появились массивы переменной длины. Такой массив размещается в конце структуры. И с sizeof введены изменения насчёт рантайма.
Посмотрите, авось чего получится
ЗЫ. Если байт длины описывает длину дескриптора, то, ИМХО, это поле лишнее.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
SM
сообщение Jun 21 2009, 15:46
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Понятно smile.gif Я, вообще, ассемблером заделал блок дескрипторов... Чтоба не возиться с указанными вопросами и полностью автоматизировать вычисление длин на этапе компиляции....
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 21 2009, 16:09
Сообщение #19


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(SM @ Jun 21 2009, 19:46) *
Понятно smile.gif Я, вообще, ассемблером заделал блок дескрипторов... Чтоба не возиться с указанными вопросами и полностью автоматизировать вычисление длин на этапе компиляции....

У меня тоже автоматом всё. Но с ассемблером, как только на Си перешёл, дел стараюсь не иметь laughing.gif
С ним обычно, наоборот, мороки на порядок больше...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 21 2009, 18:42
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Не проще ли написать функцию, которая в качестве параметра получают обычную С-строку и сама затем преобразует в unicode строку и заполняет все необходимые поля usb дескриптора. Я так понимаю, вам это часто приходится проделывать?
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 21 2009, 19:37
Сообщение #21


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(sergeeff @ Jun 21 2009, 22:42) *
Не проще ли написать функцию, которая в качестве параметра получают обычную С-строку и сама затем преобразует в unicode строку и заполняет все необходимые поля usb дескриптора. Я так понимаю, вам это часто приходится проделывать?

Да нет, не часто. Но нужно будет время от времени.
Тоже думал про отдельную функцию, но решил, что всё же она лишняя.

ЗЫ: слава богу ещё, что USB дескрипторы сформатированы в little endian, а то недавно осваивал карты памяти - там сплошной big endian.
Вот где полная задница - компиляторы не имеют механизма смены "индейца", как результат - полная неработоспособность структур с битовыми полями - всё пришлось делать ручками... smile3046.gif
Go to the top of the page
 
+Quote Post
meister
сообщение Jun 22 2009, 07:11
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(sergeeff @ Jun 21 2009, 22:42) *
написать функцию


Это уже рантайм. Как идея, конечно, зависит от количества дескриптором и того, как часто их нужно править... написать свой препроцессор.
Go to the top of the page
 
+Quote Post
SM
сообщение Jun 22 2009, 07:20
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(meister @ Jun 22 2009, 11:11) *
написать свой препроцессор.

Ну уж прям и препроцессор... Это все можно сгенирить обычными bash/awk/perl/e.t.c. (что кому привычнее) из простого списка строк и включить в make (или pre-build step)... Если уж в эту сторону думать.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jun 22 2009, 09:02
Сообщение #24


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



А ещё COG - и не только для этого.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 15:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01425 секунд с 7
ELECTRONIX ©2004-2016