|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.03.2018, 13:50 | #1 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 20
|
sprintf в unsigned char. Есть ли разница?
Добрый день!
Хотелось бы для себя прояснить элементарным вопрос - разницу между char и unsigned char строками. Хочу сохранить поля структуры различных типов в строке, для передачи через очередь в другой процесс. Начал выводить sprintf-ом в unsigned char. В мейкфайле стоит флаг Werror, который начал ругаться, мол, sprintf хочет char *dest строку. И тут я немного подзавис. Чем чревато, если закрыть глаза на это предупреждение? Подскажите, пожалуйста, разницу между char и unsigned char результирующими строками. Спасибо. |
03.03.2018, 14:29 | #2 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
При сравнении. Коды символов выше 127 в первом случае отрицательны, и т.о. образом меньше чем 'F' скажем. Во втором случае положительны и больше чем. Для ASCII таблицы ничем не отличается (т.е.для кодов 1-127).
|
03.03.2018, 14:48 | #3 |
Пользователь
Регистрация: 03.03.2018
Сообщений: 20
|
Большое спасибо!
То есть можно спокойно через sprintf выводить int, float и char строки (содержащие латинский алфавит, цифры, точки) в unsigned char и не бояться что что-то по дороге потеряется? |
03.03.2018, 15:14 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Это наследие от того, что байт представлялся как unsigned char. Что именно выводить и uchar, как выходная строка, никак не связаны, кроме размера и т.д.
|
03.03.2018, 23:01 | #5 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
есть три типа данных: signed char, unsigned char, и просто char. первый - знаковый. второй - беззнаковый. третий - эквивалетный либо первому, либо второму в зависимости от конкретной платформы. чем чревато использование 3го типа? теоретически можно нарваться на ситуцию сравнения знакового и беззнакового символов. например: Код:
код отработает не так, как ожидается. поэтому, не рекомендуется использовать тип char ни для чего, за искл. хранения собственно буковок. для хранения числовых данных, рекомендуется использовать явным образом, либо signed char, либо unsigned char. |
|
04.03.2018, 01:52 | #6 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
А еще лучше не связыватся с этими чар) и сделать
#include <stdint.h> и пользоваться int8_t, uint8_t |
04.03.2018, 05:02 | #7 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
И вновь вернемся к вопросу темы о приведении.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разница между char ch[] = {'a','b','c'}; и char ch[] = "abc"; | pompiduskus | Общие вопросы C/C++ | 6 | 26.11.2015 21:53 |
конвертирование из unsigned char в char | Sparky | Помощь студентам | 8 | 22.05.2012 16:46 |
'unsigned char [512]' в 'const char *' | frommars | Visual C++ | 8 | 02.07.2011 13:37 |
unsigned char в array<Byte> | Artemprodigy | Visual C++ | 0 | 23.03.2011 11:19 |
перевод в string из unsigned char | Dimarik | Общие вопросы C/C++ | 5 | 22.03.2011 22:46 |