if(crc <= '9')
crc=crc-'0';
else[color=green]/* |=> if(crc >= 'a' && crc <= 'z')*/[/color]
crc=crc- 87;[color=green]/*для маленьких букв, а для больших 55*/[/color]
шестнадцетиричное представление чисел в строке
Надо получить его шестнадцатеричное представление в строку. char crc[255];
Например, printf("%x", crc_int);
выводит "97de9eaa".
Надо чтоб тоже самое было в char не в символьном представлении, а именно в шестнадцатеричном.
Т.е. если записать строку в файл, открыть в hex редакторе, то в шестнадцатеричном представлении увидишь 97de9eaa, а в символьном кракозябры.
Делаю так:
itoa(crc_int, crc, 16);
получаю то, что не требуется - число в символьном представлении 97de9eaa.
Как это сделать?
Цитата:
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.
Как это сделать?
Дано число: unsigned long crc_int;
Надо получить его шеснадцатеричное представление в строку. char crc[255];
Например, printf("%x", crc_int);
выводит "97de9eaa".
Надо чтоб тоже самое было в char не в символьном представлении, а именно в шестнадцетиричном.
Т.е. если записать строку в файл, открыть в hex редакторе, то в шестнадцетиричном представлении увидишь 97de9eaa, а в символьном кракозябры.
Делаю так:
itoa(crc_int, crc, 16);
получаю то, что не требуется - число в символьном представлении 97de9eaa.
Как это сделать?
ну хотя бы переведи полученный символьный результат в числа:
Код:
Цитата:
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]
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);
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);
Цитата:
Originally posted by SN_ok
Спасибо за ответ.
Вот придумал еще вариант:
разбить long на байты
Спасибо за ответ.
Вот придумал еще вариант:
разбить 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);
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 на различных платформах может различаться.
Цитата:
Originally posted by honeybeer
Очень нехороший код... реализация int на различных платформах может различаться.
Очень нехороший код... реализация 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';
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';