//----------------------------------------------------------------------------
int HexToInt(char *hexStg) {
int n = 0; // position in string
int m = 0; // position in digit[] to shift
int count; // loop index
int intValue = 0; // integer value of hex string
int digit[5]; // hold values to convert
while (n < 4) {
if (hexStg[n]=='\0')
break;
if (hexStg[n] > 0x29 && hexStg[n] < 0x40 ) //if 0 to 9
digit[n] = hexStg[n] & 0x0f; //convert to int
else if (hexStg[n] >='a' && hexStg[n] <= 'f') //if a to f
digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
else if (hexStg[n] >='A' && hexStg[n] <= 'F') //if A to F
digit[n] = (hexStg[n] & 0x0f) + 9; //convert to int
else break;
n++;
}
count = n;
m = n - 1;
n = 0;
while(n < count) {
intValue = intValue | (digit[n] << (m << 2));
m--; // adjust the position to set
n++; // next digit to process
}
return (intValue);
}
//----------------------------------------------------------------------------
char * IntToBin(int n)
{
char * curbit="";
char bindata[50]="";
int k=0;
while (n > 0)
{
int nn=n%2;
itoa(nn,curbit,10);
strcat(bindata,curbit);
n = n/2;
k++;
}
char *resultat;
resultat = new char [k];
strcpy(resultat,bindata);
int i,j;
for (i=0; resultat !='\0'; i++);
for (j=0,i--; i>j; i--,j++)
{
char s;
s=resultat;
resultat=resultat[j];
resultat[j]=s;
}
return resultat;
}
//----------------------------------------------------------------------------
Преобразование HexToBin и обратно Borland Turbo C++ 3.0
Заранее огромнейшее спасибо!
Цитата:
Originally posted by coderinside
Здравствуйте! Использую досовский Borland Turbo C++ 3.0. Нужно преобразовать HEX число в набор нулей и единиц и наоборот. В Builder'е и Delphi есть спец. функции HexToBin и BinToHex. А как быть когда их нет? Искал в инете, все алгоритмы разные... Пробовал, некоторые не работают. Помогите пожалуйста. Может у Вас есть такая функция?
Заранее огромнейшее спасибо!
Здравствуйте! Использую досовский Borland Turbo C++ 3.0. Нужно преобразовать HEX число в набор нулей и единиц и наоборот. В Builder'е и Delphi есть спец. функции HexToBin и BinToHex. А как быть когда их нет? Искал в инете, все алгоритмы разные... Пробовал, некоторые не работают. Помогите пожалуйста. Может у Вас есть такая функция?
Заранее огромнейшее спасибо!
А че там алгоритм писать???
Каждой шестнадцатеричной цифре соответствует одна тетрада и все!!!
Короче идешь по hex-числу, берешь последовательно цифры и заменяешь на:
0h-0000b
1h-0001b
2h-0010b
....
Fh-1111h
Цитата:
Originally posted by Dart Bobr
А че там алгоритм писать???
Каждой шестнадцатеричной цифре соответствует одна тетрада и все!!!
Короче идешь по hex-числу, берешь последовательно цифры и заменяешь на:
0h-0000b
1h-0001b
2h-0010b
....
Fh-1111h
А че там алгоритм писать???
Каждой шестнадцатеричной цифре соответствует одна тетрада и все!!!
Короче идешь по hex-числу, берешь последовательно цифры и заменяешь на:
0h-0000b
1h-0001b
2h-0010b
....
Fh-1111h
Вот на что я потратил пол дня:
Код:
Чтобы перевести из HEX в BIN пользовать надо так:
Код:
int dec=HexToInt("C0");
cout << "\n Dec:" << dec << "\n";
char * bit=IntToBin(dec);
cout << "\n Bin:" << bit << "\n";
//------------------------------------------------------------------------------
cout << "\n Dec:" << dec << "\n";
char * bit=IntToBin(dec);
cout << "\n Bin:" << bit << "\n";
//------------------------------------------------------------------------------
А вот еще лучше - подсказал LaMiK!
Вот часть его сообщения:
"Насколько я помню, последний параметр функции itoa обозначает, какую систему исчисления использовать !! надо это использовать (sorry, за каламбур)
пример:
Код:
int number = 0x2E;
char string[25];
itoa(number, string, 2);
char string[25];
itoa(number, string, 2);
string будет содержать число 101110 что эквивалентно 0x2Е (02Eh)
Может есть способ по легче? (зато в itoa можно конвертировать в любые системы от 2 до 32)..........." :)
Теперь нужно перевести из BIN в HEX чтоб обратно в контроллер запихать... Может есть что у кого а то опять будеть что то вроде этого
[COLOR="Red"]
Код оформлятьб по Правилам ![/COLOR]
sscanf(char *,"%X",&int);