Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > 16ричные числа


Автор: WolfON 25.1.2005, 12:58
есть число в 10тичной системе(long), надо перевести его в 16ричную,только без массива чаров как-нить и без тормознутых strtoul и sprintf

Автор: Borisff2003 25.1.2005, 13:07
В какой системе записан long вопрос очень спорный smile

А для перевода в строку подойдет ltoa
там третий параметр как раз показатель системы счисления.

Автор: WolfON 25.1.2005, 14:17
Borisff2003
а потом записать его в массив unsigned char'ов, какие идеи?

Автор: Unknown_Error 25.1.2005, 15:28
WolfON, тебе уже сказали, что надо юзать ltoa
Открой хелп и посмотри параметры передаемые в эту функцию! smile

Автор: maxim1000 25.1.2005, 15:48
Цитата
есть число в 10тичной системе(long), надо перевести его в 16ричную,только без массива чаров как-нить и без тормознутых strtoul и sprintf

не очень понятен вопрос, а именно: что хочется получить в результате
если число в какой-нибудь системе счисления, то это по определению - последовательность цифр, а значит, массив (если такое отвращение к unsigned char, можно взять double, в конце концов smile, только с ним функция ltoa работать не будет, придется вручную)
P.S.
Цитата
В какой системе записан long вопрос очень спорный

а что тут спорить? в 2^32-ричной... (ну, может 2^31-ричной, если вспомнить про знак), т.к. коэффициент один, обрабатывается целиком, составляющие отдельно не хранятся и не обрабатываются (хотя их можно выделить)

Автор: WolfON 25.1.2005, 18:20
maxim1000
Цитата
(если такое отвращение к unsigned char, можно взять double, в конце концов smile, только с ним функция ltoa работать не будет, придется вручную)

да, как это сделать вручную?

Автор: maxim1000 25.1.2005, 18:47
Цитата
да, как это сделать вручную?

так... я совсем запутался... тебе надо просто как-то перевести (т.е. подойдет стандартная функция) или сам алгоритм перевода?
должен заметить, что даже делая все вручную никуда от массивов в том или ином виде не убежать (в крайнем случае, выводить задом наперед, но это - уже извращение)...

Автор: Unknown_Error 25.1.2005, 20:09
Цитата(maxim1000 @ 25.1.2005, 15:48)
можно взять double, в конце концов

хм... и как же в нем представить числов 16 виде?
В этой системе исчисления присутствуют A B C D E F (10 11 12 13 14 15)
Соответственно я не думаю, что здесь можно будет обойтись без массива чаров!

Автор: WolfON 25.1.2005, 23:25
byte - это unsigned char
Код

printf("Enter most significant 32 bits of key in hex  : ");
                scanf("%lX",&val);
                keyreg[7]=(byte)(val>>24);
                keyreg[6]=(byte)(val>>16);
                keyreg[5]=(byte)(val>>8);
                 keyreg[4]=(byte)(val>>0);
                 printf("Enter least significant 32 bits of key in hex : ");
                scanf("%lX",&val);
                keyreg[3]=(byte)(val>>24);
                keyreg[2]=(byte)(val>>16);
                keyreg[1]=(byte)(val>>8);
                 keyreg[0]=(byte)(val>>0);


мне надо в keyreg ввести число, как?

Автор: Tripl-X 26.1.2005, 00:02
Вот так:
Код

printf("%x", y);//y - любое число, символ или переменная

Это выведет тебе на экран 16ричное представление того, чего тебе надо...

Автор: WolfON 26.1.2005, 11:18
Tripl-X
мне НУЖНО в массив unsigned char'ов ввести 16ричное число из обычного, скажем из long, как он задается при вводе вручную вы видели, идеи

Автор: Borisff2003 26.1.2005, 11:34
Цитата

мне НУЖНО в массив unsigned char'ов ввести 16ричное число из обычного, скажем из long, как он задается при вводе вручную вы видели, идеи


Так тебе надо 16-ое в виде читаемом для человека или просто байты из long повытаскивать smile

long он и есть long и внутреннее представление не буте отличатся от того как ты его ввел
Далее все одинаково

Код

long i=16;
long j =0x10;


j и i одинаковы!!! Твори с ними све что хочешь.


Автор: LuckLess 26.1.2005, 12:46
не очень понятно как тебе
Цитата(Borisff2003 @ 26.1.2005, 11:34)
НУЖНО в массив unsigned char'


Цитата(WolfON @ 25.1.2005, 12:58)
только без массива чаров


но может поможет этот код...
с массивом чаров правда...
Код

void main(void){
int i=0;
long chislo=68552;
unsigned char hz[30]={0},*result;


while(chislo!=0){
hz[i++]=chislo%16+48;
if (hz[i-1]>58) hz[i-1]+=39;
chislo/=16;
}

result=strrev(hz);
printf("%s",result);

_getch();
}


Автор: WolfON 1.2.2005, 18:55
LuckLess
пасиб тебе smile
Добавлено @ 18:55
LuckLess
пасиб тебе smile
но я тут сам сделал кое-как без массивов smile

Автор: Adil' 2.2.2005, 12:27
Цитата(WolfON @ 1.2.2005, 18:55)
но я тут сам сделал кое-как без массивов
Очень бы хотелось взглянуть на реализацию - глядишь, может станет понятно, что все-таки было нужно. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)