|
|
  |
char vs uint8_t, Что используете для определения строк? |
|
|
|
Dec 24 2014, 22:39
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Естественно char. Строка состоит из символов, char хранит символ. И это единственное, для чего использую char - именно когда надо хранить символ (строку символов). Когда нужен байт - использую (u)int(_fast)8_t, а когда нужен указатель на область памяти, в которой может быть что угодно (для передачи, приема, побайтовой отладочной распечатки) - void (const) *, использую неявное приведение любого указателя к void (const) * и уже внутри соотвествующей функции привожу к указателю на байт: Код template <typename T> void dump(T const & data) { dump(&data, sizeof(T)); } void dump(void const * from, size_t size) { auto pSrc = (uint8_t const * )from; ..... }
void test() { struct t1 { ...... } Data;
dump(Data); } Предупреждений нет.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 25 2014, 13:04
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Dec 25 2014, 03:39)  Код void dump(void const * from, size_t size) { auto pSrc = (uint8_t const * )from; ..... } Ну, если плюсы, то лучше наверное так: Код auto pSrc = reinterpret_cast<(uint8_t const * )>(from). ?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Dec 25 2014, 14:28
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(ViKo @ Dec 25 2014, 17:09)  Вопрос 16-битового char, видимо, все же, не стоит. На то есть wchar. Это Вы недопоняли суть... Есть такие архитектуры, где размер char равен размеру wchar_t, и оба 16-битные. И, если на этой архитектуре реализован тип int8_t, то, если строку объявить как int8_t, что-то с ней поделать как с массивом, а потом использовать какой-нибудь стандартный strcmp, то будет смачный глюк из серии "хрен найдешь".
|
|
|
|
|
Dec 25 2014, 15:15
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(SM @ Dec 25 2014, 17:28)  Это Вы недопоняли суть... Есть такие архитектуры, где размер char равен размеру wchar_t, и оба 16-битные. И, если на этой архитектуре реализован тип int8_t, то, если строку объявить как int8_t, что-то с ней поделать как с массивом, а потом использовать какой-нибудь стандартный strcmp, то будет смачный глюк из серии "хрен найдешь". Слава богу, что я не знаком с такими архитектурами.  Там, наверное, все типы по 16 битов?  Я когда-то решил, что char уже анахронизм. Был неправ.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|