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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Чем отличается uint8_t от unsigned char?
-=Женек=-
сообщение May 14 2010, 19:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Коллеги, переношу проект из WinAVR в KEIL.
Есть переменная uint8_t - в KEIL не прокатывает. Задумался, а чем же по сути она отличается от char. И как ее объявить в KEIL, дабы перенести без минимальных последствий?
Go to the top of the page
 
+Quote Post
rezident
сообщение May 14 2010, 19:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Тем, что uint8_t имеет конкретно определенную размерность - 8 бит. А unsigned char не имеет определенной размерности. В стандарте Си определено только соотношение char <= short int <= int <= long int. Например, на архитектуре TMS320 в среде CCS тип char 16-и битный.
Для использования типов с определенной привязкой к размеру следует использовать хедер stdint.h.
Go to the top of the page
 
+Quote Post
dch
сообщение May 15 2010, 03:27
Сообщение #3


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

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(rezident @ May 14 2010, 23:44) *
В стандарте Си определено только соотношение char <= short int <= int <= long int.

четырехбитников мало а доступ к 8 битам есть как правило почти везде.

Сообщение отредактировал dch - May 15 2010, 03:40
Go to the top of the page
 
+Quote Post
Danis
сообщение May 20 2010, 11:29
Сообщение #4


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



UInt8 - An unsigned 8-bit integer. This value maps to the Byte type.

Character Sets Used by Fonts
All fonts use a character set. A character set contains punctuation marks, numerals, uppercase and lowercase letters, and all other printable characters. Each element of a character set is identified by a number.

Most character sets in use are supersets of the U.S. ASCII character set, which defines characters for the 96 numeric values from 32 through 127. There are five major groups of character sets:

Windows
Unicode
OEM (original equipment manufacturer)
Symbol
Vendor-specific

Сообщение отредактировал Danis - May 20 2010, 11:30


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 20 2010, 13:41
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Откуда цитата?
И какое отношение она имеет к соотношению размеров типа unsigned char и uint8_t?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
shista
сообщение Jun 12 2010, 19:08
Сообщение #6





Группа: Участник
Сообщений: 12
Регистрация: 15-07-09
Пользователь №: 51 296



Добавьте к инклудам #include <inttypes.h> или #include <stdint.h> и будет Вам счастье...
В AVR-овских исходниках, как правило, также встречается инклуд на один из этих файлов.
Go to the top of the page
 
+Quote Post
baralgin
сообщение Jun 12 2010, 20:07
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Цитата(rezident @ May 14 2010, 22:44) *
Тем, что uint8_t имеет конкретно определенную размерность - 8 бит. А unsigned char не имеет определенной размерности. В стандарте Си определено только соотношение char <= short int <= int <= long int. Например, на архитектуре TMS320 в среде CCS тип char 16-и битный.

Стесняюсь спросить...а на вышеназванной платформе что представляет собой uint8_t? К примеру на армах это: "typedef unsigned char uin8_t". А на tms320 ? cranky.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2010, 09:06
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Чстенько компиляторы имеют свои собственные builtin типы данных которыми впоследствии определяются различные другие типы.
Так что размер uint8_t - будет 8 бит (я так думаю) - вопрос насколько эффективен он на такой платформе...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jun 13 2010, 10:36
Сообщение #9


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Открою Вам маленький секрет smile.gif В stdint.h для C2000 нет ни int8_t ни uint8_t
Есть только int_least8_t и uint_least8_t, которые, как и полагается, 16ти битные.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2010, 10:55
Сообщение #10


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Интересный ход. Нет человека - нет проблем!:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jun 13 2010, 16:06
Сообщение #11


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну не может он обеспечить 8бит никак!
там sizeof(char) == 1
Можно только побайтово перебрать массив с помощью intrinsic т.е. он там грузит в AL 16бит, а потом можно обратиться к старшему и младшему байту как к двум 8ми битным регистрам. На этом 8ми битность заканчивается smile.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 14 2010, 04:53
Сообщение #12


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(sigmaN @ Jun 13 2010, 23:06) *
там sizeof(char) == 1

А где иначе? smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
baralgin
сообщение Jun 14 2010, 05:47
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Цитата(dxp @ Jun 14 2010, 07:53) *
А где иначе? smile.gif

Это была опечатка. Как раз равно 2 smile.gif
Go to the top of the page
 
+Quote Post
baralgin
сообщение Jun 14 2010, 06:50
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



легкий поиск гуглом и оказывается таки 1, как и int...
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jun 14 2010, 07:20
Сообщение #15


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Это была опечатка. Как раз равно 2
именно 1.
В принципе то да, sizeof(char) всегда 1, но тут то это не 8бит, а 16 smile.gif в этом вся "фишка"
Написал я про размер char для того, чтобы было понятно, что и не может там быть int8_t т.к. чему же тогда равнялся бы его sizeof? 0.5 что-ли smile.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

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

 


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


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