Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

шестнадцетиричное представление чисел в строке

10K
10 мая 2006 года
SN_ok
17 / / 30.11.2005
Дано число: unsigned long crc_int;

Надо получить его шестнадцатеричное представление в строку. char crc[255];

Например, printf("%x", crc_int);
выводит "97de9eaa".

Надо чтоб тоже самое было в char не в символьном представлении, а именно в шестнадцатеричном.

Т.е. если записать строку в файл, открыть в hex редакторе, то в шестнадцатеричном представлении увидишь 97de9eaa, а в символьном кракозябры.


Делаю так:
itoa(crc_int, crc, 16);

получаю то, что не требуется - число в символьном представлении 97de9eaa.

Как это сделать?
242
10 мая 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by SN_ok
Дано число: unsigned long crc_int;

Надо получить его шеснадцатеричное представление в строку. char crc[255];

Например, printf("%x", crc_int);
выводит "97de9eaa".

Надо чтоб тоже самое было в char не в символьном представлении, а именно в шестнадцетиричном.

Т.е. если записать строку в файл, открыть в hex редакторе, то в шестнадцетиричном представлении увидишь 97de9eaa, а в символьном кракозябры.


Делаю так:
itoa(crc_int, crc, 16);

получаю то, что не требуется - число в символьном представлении 97de9eaa.

Как это сделать?


ну хотя бы переведи полученный символьный результат в числа:

 
Код:
if(crc <= '9')
  crc=crc-'0';
else[color=green]/* |=> if(crc >= 'a' && crc <= 'z')*/[/color]
   crc=crc- 87;[color=green]/*для маленьких букв, а для больших  55*/[/color]
10K
10 мая 2006 года
SN_ok
17 / / 30.11.2005
Цитата:
Originally posted by OlgaKr
ну хотя бы переведи полученный символьный результат в числа:
 
Код:
if(crc <= '9')
  crc=crc-'0';
else[color=green]/* |=> if(crc >= 'a' && crc <= 'z')*/[/color]
   crc=crc- 87;[color=green]/*для маленьких букв, а для больших  55*/[/color]



Спасибо за ответ.

Вот придумал еще вариант:
разбить long на байты

 
Код:
char crc[4];
    memset (crc, '\0', 4);
    crc[3] = (Byte)(crc_int>>24&0xFF);
    crc[2] = (Byte)(crc_int>>16&0xFF);
    crc[1] = (Byte)(crc_int>>8&0xFF);
    crc[0] = (Byte)(crc_int&0xFF);
585
11 мая 2006 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by SN_ok
Спасибо за ответ.

Вот придумал еще вариант:
разбить long на байты
 
Код:
char crc[4];
    memset (crc, '\0', 4);
    crc[3] = (Byte)(crc_int>>24&0xFF);
    crc[2] = (Byte)(crc_int>>16&0xFF);
    crc[1] = (Byte)(crc_int>>8&0xFF);
    crc[0] = (Byte)(crc_int&0xFF);


Очень нехороший код... реализация int на различных платформах может различаться.

242
11 мая 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by honeybeer
Очень нехороший код... реализация int на различных платформах может различаться.



тогда может стоит сделать что то вроде этого:

 
Код:
char crc[80];
int i, n, size_;
n = size_ = sizeof(crc_int);
for(i = 0; i < size_;i++)
{
 crc = (Byte)(crc_int>>((n-1)*8)&0xFF);
 n--;
}
crc = '\0';
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог