![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Ребята, есть проблема.. Я фонарю в си.. fprintf( fo, "%x\n", arg), это я записую в файл fo переменную arg равную 0x80. Но в файле пишется не информация в hex'е а просто значение этой информации, то есть буквально "80", что в hex означает совсем другое. Вообще переменная обозначается как int arg=0x80. Может не INT?
![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
в форматной строке могут быть любые символы. в таком случае они выводятся как есть.
"0x%x\n" |
|||
|
||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Так а как вообще сделать так, чтоб символ соответствовал значению 0x80? То есть записаный символ в HEX равен 0x80 (128)?
|
|||
|
||||
Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 13 Всего: 41 |
надо пользоваться функцией atol
-------------------- |
|||
|
||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Ниче не понял.. Причем тут преобразование строки в целое значение? Я что-то путаю?
|
|||
|
||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Карочь, браццы, скажите как переводить intы от 0 до 255 в ASCII символы?
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
? или тебе надо число превратить в строку? число 32 НЕ равно строке '32' вообще, если строго говорить, то число 0x31 не равно '1'... т.к. это справедливо только в определенных кодировках и т.п.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Нифига не понял, какие числа в какие символы, при чем здесь HEX? ![]() |
|||
|
||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Притом xvr. Тут дело кароче в том, что программа читает не символы, а значения этих символов. К примеру
if (a==97) BOOM; но прога читает не сами символы "97" а символ ascii имеющий это значение, то есть латинскую малую "a". Таким кандибобером можно работать с помощью кода --------------------------------------- int arg=97; unsigned code; code=arg; FILE * fo; fo = fopen("/file.xxx","w"); fprintf( fo, "%c", code); ---------------------------------------- сунит в файл АСКИ-значение 97. Но это работает тока для 8-битных значений, а как для 16-, 32-битных бы, га? |
|||
|
||||
xvr |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Компьютер вообще работает только с числами ![]()
НИКАКОЙ другой разницы между ними нет.
Сунет, можно даже проще: fprintf( fo, "%c", 97);, просто сунет байт 97 в файл
|
||||||||
|
|||||||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Спасибо!
Я вот тут заметил, в HEX-редакторе цифры со значением от 000 до 255 могут принять 16-битное значение, например 511 если следующая за ней цифра имеет значение 001. То есть получается какая-то степень, что ли.. Вот мне интересно; чтобы записать 16-битное число, к примеру 511 нужно что организовать программно алгоритм по смещению, или есть другие способы? |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
А значение синуса в военное время до 2х доходит ![]()
![]() А если серьезно, то я не понял что и куда ты собрался писать Это сообщение отредактировал(а) xvr - 25.4.2008, 19:43 |
||||||
|
|||||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
xvr человечище прикольный!
![]() Я просто в таких делах.. В основном я программировал в Бейсике, на винде и программировал не такие вещи а проще сказать событийным подходом, типа "жми и увидишь отакое ![]()
Я просто заметил что 1 БАЙТ в совокупности со следующим будет составлять 16-битное значение. Ну например ------------------------------------------------- [255 001] 240 020.......... | 16-битное значение, равное 511 ------------------------------------------------- ...и вот-т-т-т... Ну я вот не пойму как записать число 511 так, чтоб оно было равно двум БАЙТам, с вот такими вот, видимо значениями... |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Будет. Можно читать/писать и по 3 байта и по 4 - это вопрос трактовки. Для начала нужно определиться, какой файл мы собираемся читать/писать - текстовый или бинарный (кстати, это опять же вопрос трактовки - СОДЕРЖИМОЕ файла от этого не изменится, изменится лишь то, как мы будем его понимать) Если файл текстовый, то он однозначно воспринимается как последовательность байтов (одиночных), каждый из которых представляет один символ. (Мы пока оставим в стороне текстовые форматы в Unicode - там все сложнее, их лучше рассматривать как бинарные). Если же файл бинарный, то мы вольны группировать и трактовать последовательности байтов в нем как нам нужно. Любое число (в памяти компьютера) занимает от 1го до скажем 4х байтов (char, short, long), память, занимаемая числом так же можно рассматривать как одно неделимое целое (4660 = 0x1234) или как последовательность байтов (0x34, 0x12). Эту последовательность можно записать или прочесть из файла просто как участок памяти:
Функции семейства printf применяют в основном для записи в текстовые файлы, т.к. они орентированны именно на форматированный вывод текста и сделать с их помощью бинарный вывод весьма не просто. PS. С форматом представления чисел в памяти тоже не все просто - на разных платформах они представляются по разному. Intel представляет их в формате LSB (Less Significant Byte [first] - Младшими разрядами вперед) - по младшему адресу в памяти находятся младшие биты числа (0x12345678 => 0x78, 0x56, 0x34, 0x12), Motorola в формате MSB (Most Significant Bytes [fist] - Старшими разрядами вперед) - в обратном порядке (0x12345678 => 0x12, 0x34, 0x56, 0x78) |
||||
|
|||||
CoDecode |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 20.3.2008 Где: Украина, Херсонск ая обл. Репутация: нет Всего: нет |
Вот спасибо!!! Вводной курс в "байтологию"!
![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |