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

Ваш аккаунт

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

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

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

Помогите с переводом шестнадцатеричных чисел

2.2K
03 марта 2003 года
jbn
14 / / 19.02.2003
Есть строковая переменная STR, в которой нех число. Мне нужно перевести его в int. Как корректно сравнить, к примеру, STR[1] с A, B, C, D, E, F и в зависимости от результата присвоить int переменной значения соответственно 10,11,12,13,14,15. Перепробовал кучу вариантов, никак не получается.
362
03 марта 2003 года
_kolyan
339 / / 03.12.2002
char str[...] здесь стока с числом
int a здесь будет число
sscanf(str, "%x", &a) кладем число из строки в переменную
2.2K
03 марта 2003 года
jbn
14 / / 19.02.2003
Цитата:
Originally posted by _kolyan
char str[...] здесь стока с числом
int a здесь будет число
sscanf(str, "%x", &a) кладем число из строки в переменную



код
int g;
STR = StringGrid1->Cells[1][15];
char STRc = STR[3];
sscanf(STRc, "%x", &g); (строка №424)

Выдал такие ошибки:
[C++ Error] UnitOCR.cpp(424): E2034 Cannot convert 'int' to 'const char *'
[C++ Error] UnitOCR.cpp(424): E2342 Type mismatch in parameter '__buffer' (wanted 'const char *', got 'char')

4
03 марта 2003 года
mike
3.7K / / 01.10.2002
Классика:

Код:
static int IntFromHex(char *pChars) {
    int Hi;        // holds high byte
    int Lo;        // holds low byte
    int Result;    // holds result

    // Get the value of the first byte to Hi

    Hi = pChars[0];
    if ('0' <= Hi && Hi <= '9') {
        Hi -= '0';
    } else
    if ('a' <= Hi && Hi <= 'f') {
        Hi -= ('a'-10);
    } else
    if ('A' <= Hi && Hi <= 'F') {
        Hi -= ('A'-10);
    }

    // Get the value of the second byte to Lo

    Lo = pChars[1];
    if ('0' <= Lo && Lo <= '9') {
        Lo -= '0';
    } else
    if ('a' <= Lo && Lo <= 'f') {
        Lo -= ('a'-10);
    } else
    if ('A' <= Lo && Lo <= 'F') {
        Lo -= ('A'-10);
    }
    Result = Lo + (16 * Hi);
    return (Result);
}
2.2K
04 марта 2003 года
jbn
14 / / 19.02.2003
Цитата:
Originally posted by mike
Классика:

Код:
static int IntFromHex(char *pChars) {
    int Hi;        // holds high byte
    int Lo;        // holds low byte
    int Result;    // holds result

    // Get the value of the first byte to Hi

    Hi = pChars[0];
    if ('0' <= Hi && Hi <= '9') {
        Hi -= '0';
    } else
    if ('a' <= Hi && Hi <= 'f') {
        Hi -= ('a'-10);
    } else
    if ('A' <= Hi && Hi <= 'F') {
        Hi -= ('A'-10);
    }

    // Get the value of the second byte to Lo

    Lo = pChars[1];
    if ('0' <= Lo && Lo <= '9') {
        Lo -= '0';
    } else
    if ('a' <= Lo && Lo <= 'f') {
        Lo -= ('a'-10);
    } else
    if ('A' <= Lo && Lo <= 'F') {
        Lo -= ('A'-10);
    }
    Result = Lo + (16 * Hi);
    return (Result);
}



Большое человеческое СПАСИБО.
Работает.

362
05 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by jbn


код
int g;
STR = StringGrid1->Cells[1][15];
char STRc = STR[3];
sscanf(STRc, "%x", &g); (строка №424)

Выдал такие ошибки:
[C++ Error] UnitOCR.cpp(424): E2034 Cannot convert 'int' to 'const char *'
[C++ Error] UnitOCR.cpp(424): E2342 Type mismatch in parameter '__buffer' (wanted 'const char *', got 'char')



int g;
STR = StringGrid1->Cells[1][15];
char *STRc = STR.c_str()[3];
sscanf(STRc, "%x", &g); (строка №424) - номер строчки это лишняя информация

2.2K
05 марта 2003 года
jbn
14 / / 19.02.2003
Николай, спасибо, ошибку понял.
Тут возникла еще одна заморочка. У меня в StringGrid с Cells[1][108] по Cells[1][275]записаны двоичные значения в виде "Yes", "No" (одно значение на ячейку). Нужно их читать оттуда по восемь, конвертировать и полученный байт писать в файл (всего 21 байт). Я делаю так:
e=108;
while (e<=268){
a=7; g=0;
for (d=e+7; d>=e; d--){
STR = StringGrid1->Cells[1][d];
b=STR[1];
if (b>='Y'){b=1;}else if (b<='N'){b=0;}
g=g+(2^a*b);
a=a-1;}
FileWrite(f,&g,1); e=e+8;}
Компилятор не ругается, но в файл пишется совсем не то, что нужно. Похоже, я опять заморочился с типами данных (if (b<'Y'){b=0;}else {b=1;}). b задекларирована как int.
Юра.
2.2K
05 марта 2003 года
jbn
14 / / 19.02.2003
Смайлик воткнулся не в тему. Там цифра 268 и скобка закрывается.
Юра.
362
05 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by jbn
Николай, спасибо, ошибку понял.
Тут возникла еще одна заморочка. У меня в StringGrid с Cells[1][108] по Cells[1][275]записаны двоичные значения в виде "Yes", "No" (одно значение на ячейку). Нужно их читать оттуда по восемь, конвертировать и полученный байт писать в файл (всего 21 байт). Я делаю так:
e=108;
while (e<=268){
a=7; g=0;
for (d=e+7; d>=e; d--){
STR = StringGrid1->Cells[1][d];
b=STR[1];
if (b>='Y'){b=1;}else if (b<='N'){b=0;}
g=g+(2^a*b);
a=a-1;}
FileWrite(f,&g,1); e=e+8;}
Компилятор не ругается, но в файл пишется совсем не то, что нужно. Похоже, я опять заморочился с типами данных (if (b<'Y'){b=0;}else {b=1;}). b задекларирована как int.
Юра.



Попробуй так

char ch;
int b, g;
for(int i = 108; i <= 268; i++)
{
g = 0;
for(int j = 0; j < 8l; j++)
{
ch = StringGrid1->Cells[1][d].c_str()[0];
//0 - первый символ, а не 1
b = (ch == 'Y')? 1: 0;/*если возможные значения только Yes и No то достаточно проверить на соответствие с одним из них*/
g |= b << 8-j;
}

или короче
for(int i = 108; i <= 268; i++)
{
g = 0;
for(int j = 0; j < 8l; j++)
{
ch = ;
//0 - первый символ, а не 1
/*если возможные значения только Yes и No то достаточно проверить на соответствие с одним из них*/
g |= (StringGrid1->Cells[1][d].c_str()[0] == 'Y') << 8-j;
}

362
05 марта 2003 года
_kolyan
339 / / 03.12.2002
Извиняюсь
Так точнее будет

или короче
for(int i = 108; i <= 268; i+=8)
{
g = 0;
for(int j = 0; j < 8; j++)
{
ch = ;
//0 - первый символ, а не 1
/*если возможные значения только Yes и No то достаточно проверить на соответствие с одним из них*/
g |= (StringGrid1->Cells[1][i+j].c_str()[0] == 'Y') << 8-j;
}
2.2K
05 марта 2003 года
jbn
14 / / 19.02.2003
Спасибо, Николай. Все работает как надо.
Юра.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог