Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2018, 13:50   #1
Салага
Пользователь
 
Регистрация: 03.03.2018
Сообщений: 17
По умолчанию sprintf в unsigned char. Есть ли разница?

Добрый день!

Хотелось бы для себя прояснить элементарным вопрос - разницу между char и unsigned char строками.
Хочу сохранить поля структуры различных типов в строке, для передачи через очередь в другой процесс.
Начал выводить sprintf-ом в unsigned char. В мейкфайле стоит флаг Werror, который начал ругаться, мол, sprintf хочет char *dest строку.
И тут я немного подзавис. Чем чревато, если закрыть глаза на это предупреждение?

Подскажите, пожалуйста, разницу между char и unsigned char результирующими строками. Спасибо.
Салага вне форума Ответить с цитированием
Старый 03.03.2018, 14:29   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

При сравнении. Коды символов выше 127 в первом случае отрицательны, и т.о. образом меньше чем 'F' скажем. Во втором случае положительны и больше чем. Для ASCII таблицы ничем не отличается (т.е.для кодов 1-127).
alexzk вне форума Ответить с цитированием
Старый 03.03.2018, 14:48   #3
Салага
Пользователь
 
Регистрация: 03.03.2018
Сообщений: 17
По умолчанию

Большое спасибо!

То есть можно спокойно через sprintf выводить int, float и char строки (содержащие латинский алфавит, цифры, точки) в unsigned char и не бояться что что-то по дороге потеряется?
Салага вне форума Ответить с цитированием
Старый 03.03.2018, 15:14   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Это наследие от того, что байт представлялся как unsigned char. Что именно выводить и uchar, как выходная строка, никак не связаны, кроме размера и т.д.
p51x вне форума Ответить с цитированием
Старый 03.03.2018, 23:01   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
При сравнении. Коды символов выше 127 в первом случае отрицательны, и т.о. образом меньше чем 'F' скажем. Во втором случае положительны и больше чем. Для ASCII таблицы ничем не отличается (т.е.для кодов 1-127).
а теперь правильный ответ:
есть три типа данных:
signed char, unsigned char, и просто char.

первый - знаковый.
второй - беззнаковый.

третий - эквивалетный либо первому,
либо второму в зависимости от конкретной платформы.


чем чревато использование 3го типа?
теоретически можно нарваться на ситуцию сравнения
знакового и беззнакового символов.

например:

Код:
char val = 200;

if(val>150)
    first();
else
    second();
в случае, если на данной платформе чар окажется знаковым,
код отработает не так, как ожидается.

поэтому, не рекомендуется использовать тип char ни для чего,
за искл. хранения собственно буковок.

для хранения числовых данных,
рекомендуется использовать явным образом,
либо signed char, либо unsigned char.
_Bers вне форума Ответить с цитированием
Старый 04.03.2018, 01:52   #6
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

А еще лучше не связыватся с этими чар) и сделать

#include <stdint.h>

и пользоваться
int8_t, uint8_t
alexzk вне форума Ответить с цитированием
Старый 04.03.2018, 05:02   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

И вновь вернемся к вопросу темы о приведении.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между 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