Консультация № 190410
11.01.2017, 18:23
0.00 руб.
0 10 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Вопрос в следующем. Необходимо передавать в шестнадцатеричной системе значения в формате - 0х20. Значения получаю в десятичных. Можно как то переконвертировать формат для шестнадцатеричной системы?

Обсуждение

давно
Советник
400484
472
11.01.2017, 18:34
общий
Забыл написать язык программирования Си. Желательно без использования сторонних библиотек. Код под микроконтроллер...
давно
Посетитель
7438
7205
11.01.2017, 18:38
общий
Адресаты:
Хотя бы так:
Код:

char ch = 4;
char str[8];
sprintf(str, "0x%.2x", ch);
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
11.01.2017, 18:44
общий
Адресаты:
О! Контроллеры! Наши люди!
Тогда лучше так:
Код:
char *hex = "0123456789ABCDEF";
int main()
{
char ch = 4;
char str[4];
str[0] = '0';
str[1] = 'x';
str[2] = hex[ch>>4];
str[3] = hex[ch&0x0f];
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
11.01.2017, 18:58
общий
Адресаты:
Какие контроллеры-то?
Лично я работаю в основном на AVR, правда, исключительно, на асме
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Советник
400484
472
11.01.2017, 19:03
общий
в общем так можно. Но хотелось бы как-то так:
Код:

int iHex = 0x20;
int iDec = 2;

SetValue(iHex); // правильно
SetValue(iDec); // не совсем правильно...
SetValue(Convert(iDec)); // так будет правильно
давно
Посетитель
7438
7205
11.01.2017, 19:20
общий
Адресаты:
Чем отличается записи?
int iHex = 0x20;
int iDec = 2;
Да ничем! И то, и то - числа!
Первое равно и 32, и 0x20
Второе равно и 2, и 0x02
Числа будут отличаться только при выводе, передаче, интерпретации!
Если надо передать числе в виде hex-строки, то эту строку надо сформировать и передать.
Еще один вариант:
Код:
char hex(char ch)
{
ch &= 0x0f;
if (ch < 0x0a)
return (ch + '0');
else
return (ch - 0x0a + 'A');
}

int main()
{
char ch = 'z';
char str[5];
str[0] = '0';
str[1] = 'x';
str[2] = hex(ch>>4);
str[3] = hex(ch);
str[4] = 0;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Советник
400484
472
12.01.2017, 10:16
общий
Цитата: Лысков Игорь Витальевич
solowey:
Какие контроллеры-то?
Лично я работаю в основном на AVR, правда, исключительно, на асме

На stm32.

В общем я так и думал. Все же хотел проверить свои знания... спасибо.
давно
Посетитель
7438
7205
12.01.2017, 11:28
общий
Адресаты:
На stm32 тоже писал. Хорошая вещь. В некоторых случаях просто незаменим.
Еще один вариант:
Код:
char hex(char ch)
{
ch &= 0x0f;
if (ch < 0x0a)
return (ch + '0');
else
return (ch - 0x0a + 'A');
}
int main()
{
char ch = 'z';
Send('0');
Send('x');
Send(hex(ch>>4));
Send(hex(ch));
}
Где Send - функция, которая передает один байт в канал
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
17042
808
15.01.2017, 21:02
общий
Адресаты:
Игорь Витальевич, оформите ответ?
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Посетитель
7438
7205
16.01.2017, 11:38
общий
это ответ
Здравствуйте, solowey!
Пара вариантов:
1) Сформировать строку, которую потом передать:
Код:
char hex(char ch)
{
ch &= 0x0f;
if (ch < 0x0a)
return (ch + '0');
else
return (ch - 0x0a + 'A');
}

int main()
{
char ch = 'z';
char str[5];
str[0] = '0';
str[1] = 'x';
str[2] = hex(ch>>4);
str[3] = hex(ch);
str[4] = 0;
}

2) Строку не формировать, а передавать посимвольно:
Код:
char hex(char ch)
{
ch &= 0x0f;
if (ch < 0x0a)
return (ch + '0');
else
return (ch - 0x0a + 'A');
}
int main()
{
char ch = 'z';
Send('0');
Send('x');
Send(hex(ch>>4));
Send(hex(ch));
}
Где Send - функция, которая передает один байт в канал
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа