2014-01-07 3 views
-1

Я использую функцию ниже для преобразования шестнадцатеричного числа в десятичное, но оно не печатает правильный результат. Может ли кто-нибудь помочь мне с этим? Thanku ..Функция c для преобразования шестнадцатеричного в десятичное представление

#include<stdio.h> 
#include<stdlib.h> 
long hextoint(char hex) 
{ 
printf("%x\n",hex); 
long hexa=0; 
int byte; 
for(byte=0;byte<8;byte++) 
{ 
    if(hex & (0x0001<<byte)) 
    { 
     hexa+=1*(2^byte); 
    } 

    else 
    {  
     hexa+=(0*(2^byte)); 
    } 
} 

return hexa; 
} 
int main() 
{ 
char content[]={0x1F,0xF2,0x24}; 
int i; 
for(i=0;i<3;i++) 
{ 
    long dec=hextoint(content[i]); 
    printf("%ld\n",dec); 
} 
} 
+1

'^' - побитовый оператор XOR, а не «мощный». Вы ищете '1 << byte'. Кроме того, 'hexa + = 0 * ' является избыточным. –

+1

Ваша инициализация содержимого [] неверна. – ypnos

ответ

1

char значение только числовое значение, которое хранится в виде двоичного файла на компьютере. Если вы хотите преобразовать его в шестнадцатеричный или десятичный, это просто представление того же значения, поэтому функция hextoint на самом деле не имеет смысла и имеет смысл только в том случае, если вы ее выведете.

Что вы, вероятно, имеете в виду, это вывод строки, которая может быть как десятичной, так и шестнадцатеричной, и для этого вы можете использовать семейные функции printf, как вы уже делали в вашем примере кода.

обновление

Чтения вашего комментария, ваш реальный вопрос, как представляется, с float/double и int, но это не зависит от представления в виде шестнадцатеричной или десятичной системы.

Если вы хотите, чтобы я сделал некоторый расчет, например, 23/100, и вы хотите получить 0,23 в результате, тогда вы должны использовать переменные или double. В вашем примере вы используете char, который может представлять только натуральные числа между 0-255, если без знака или от -127 до 128, если они подписаны.

+0

Что делать, если мне нужно выполнить некоторую операцию над этими шестнадцатеричными значениями, например, делить ее на 100.Это не будет работать. Правильно считать printf («% d \ n», content [i]/100); результат в 0.Wat должен я теперь делать? – user3098026

+0

Ваш расчет всегда с двоичными значениями, поэтому проблем нет. Вы должны различать, как номера находятся внутри компьютера, и как пользователь наблюдает за ними, когда они отображаются. Hex, dec, восьмеричные и т. Д. Являются ТОЛЬКО для пользователя, который удобно читать, но это не зависит от того, как компьютер обрабатывает его. Если у вас есть номер 128, он может быть представлен как 0x80, 10000000b или что-то еще, но он всегда один и тот же номер на компьютере, и это не влияет на расчет. – Devolus

+0

Обновлен ответ на ваш комментарий. – Devolus

1

вам не нужна эта функция

вы можете печатать все полукокса элементы массива в виде десятичных чисел, относящиеся непосредственно с:

for(i=0;i<3;i++) 
{ 
    printf("%ld\n",content[i]); 
} 
4

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

Значения в массиве content являются шестнадцатеричными только в редакторе. После компиляции и хранения в памяти все двоичные. Так что вам не нужны никакие специальные функции для преобразования значений, просто напечатать их в десятичной системе счисления:

printf("%u\n", content[i]); 
Смежные вопросы