Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно прочитать 16-бит из char? Как разбить один чар на два? 
V
    Опции темы
RYB
  Дата 23.5.2007, 21:26 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Я сейчас работаю с hex-кодом ФАТ 12 и для того чтобы узнать где находится начало файла мне нада прочитать 2 байта, начиная с 26-го байта записи.
Я пробовал работать с инт и чар, но в первом случае числа получаються астрономическими, а если с чаром, то просто 1-байтовыми(а мне нада 2 байта). smile 

Вобщем я понял как приобразовить чар в 2байта:
если дано
Код

unsigned char c=0x9B 
  (нада получить 155), то  9 * 16 + В = 155.

Сам вопрос: как разбить значение одной переменной чар в две(с1=0х9, с2=0хВ)?
 smile 
PM MAIL WWW   Вверх
zkv
Дата 23.5.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



RYB, вообщето char занимает 1 байт (или 8 бит)

0x9B(16) = 10011011(2) - наблюдаем 8 бит

если вам надо разбить байт по 4 бита:
Код

char c1 = c>>4;//первая половина байта
char c2 = (c<<4)>>4;//вторая половина


Это сообщение отредактировал(а) zkv - 23.5.2007, 21:35
PM MAIL   Вверх
archimed7592
Дата 23.5.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Код
unsigned char c = 0x9B;
unsigned char c1 = c >> 4;
unsigned char c2 = c & 0x0F;



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
RYB
Дата 23.5.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Спасибо, все дело в unsigned char: как я увидел на практике он занимает в отличии от чар 2 байта.
PM MAIL WWW   Вверх
codelord
Дата 23.5.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(RYB @  23.5.2007,  17:39 Найти цитируемый пост)
Спасибо, все дело в unsigned char: как я увидел на практике он занимает в отличии от чар 2 байта. 

c какой стати?


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
zkv
Дата 23.5.2007, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(RYB @  23.5.2007,  21:39 Найти цитируемый пост)
Спасибо, все дело в unsigned char: как я увидел на практике он занимает в отличии от чар 2 байта. 

а где это так?
хм, я слышал, что char может занимать и не один байт, но не сталкивался, в любом случае вы где то ошибаетесь, 0x9B - это один цельный байт, и, думаю, если char в вашем случае занимает 1 байт, то unsigned char тоже должен... 
PM MAIL   Вверх
bsa
Дата 23.5.2007, 21:48 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(RYB @ 23.5.2007,  21:39)
Спасибо, все дело в unsigned char: как я увидел на практике он занимает в отличии от чар 2 байта.

sizeof(char) == sizeof(unsigned char) == 1
sizeof(short) == sizeof(unsigned short) == 2
sizeof(int) == sizeof(unsigned int) == 4
sizeof(long) == sizeof(unsigned long) == sizeof(void*) == 4 (для 32-х битных систем) или 8 (для 64-х битных)


PM   Вверх
archimed7592
Дата 23.5.2007, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



bsa, я так категорично утверждал бы только относительно char... кстати char - это unsigned char или signed char...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 23.5.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



обычно, char - это signed char. Но у компиляторов есть ключ, который char делает unsigned char.
Но в любом случае: sizeof(unsigned char) == sizeof(signed char) == sizeof(char)

Все сказанное мной справедливо для систем, разрядность которых 32 и 64 бита.

Это сообщение отредактировал(а) bsa - 23.5.2007, 22:01
PM   Вверх
RYB
Дата 23.5.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 17.1.2007

Репутация: нет
Всего: нет



Я сделал подобный вывод так как:

если взять char c=0x9B, c=-101
unsigned char c=0x9B, c=155

+ я юзаю прогу WinHex и в окошке Data Interpreter для 0x9B:
8bit=-101
16bit=155

PM MAIL WWW   Вверх
bsa
Дата 23.5.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



И что? Все правильно.
Примеры для signed char (8 бит) и signed short (16 бит):
Код
0x80  0xFF 0x00 0x01 0x7F
-128   -1    0   +1  +127

0x8000 0xFFFF 0x0000 0x0001 0x7FFF
-32768    -1     0     +1   +32767

PM   Вверх
zkv
Дата 23.5.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



друзья, получается я ошибаюсь здесь:
Цитата(zkv @  23.5.2007,  21:44 Найти цитируемый пост)
я слышал, что char может занимать и не один байт

и char в любом случае занимает 1 байт? Это стандарт так говорит? Откуда то ведь это осело в моей голове...
PM MAIL   Вверх
Daevaorn
Дата 23.5.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(zkv @  24.5.2007,  00:01 Найти цитируемый пост)
и char в любом случае занимает 1 байт? Это стандарт так говорит?

нет. стандарт не ограничивает. ты был прав.
PM MAIL WWW   Вверх
Fazil6
Дата 23.5.2007, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(zkv @  23.5.2007,  23:01 Найти цитируемый пост)
и char в любом случае занимает 1 байт? Это стандарт так говорит?

<sensored>
Вообще байт на конкретной платформе должен обеспечивать хранение символа ASCII

Это сообщение отредактировал(а) Fazil6 - 23.5.2007, 23:34
PM MAIL   Вверх
archimed7592
Дата 23.5.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(bsa @  23.5.2007,  21:59 Найти цитируемый пост)
Но в любом случае: sizeof(unsigned char) == sizeof(signed char) == sizeof(char)
да с этим никто не спорит smile

Цитата(zkv @  23.5.2007,  23:01 Найти цитируемый пост)
Это стандарт так говорит?
угумс
Цитата(IS-5.3.3)
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the
result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined.



Цитата(bsa @  23.5.2007,  21:59 Найти цитируемый пост)
Все сказанное мной справедливо для систем, разрядность которых 32 и 64 бита.
 smile

Добавлено через 41 секунду
Daevaorn, ну блин, от тя не ожидал


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1485 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.