- Если говорить C a
char
, то это наименьшее доступное целочисленное значение.
- Говоря C и ASCII символьный литерал (например,
'A'
), это просто другое представление значения int
(здесь 65
).
- Говоря о математике, есть и другие способы представить одно и то же значение, кроме десятичного (с основанием 10). Одним из распространенных является использование основания 16, шестнадцатеричный способ.
Суммируя вышеизложенное, получается, что:
int i = 'A';
char c = i;
такой же как:
int i = 65;
char c = i;
и то же, что:
int i = 0x41;
char c = i;
и то же, что:
char c = 'A';
и то же, что:
char c = 65;
и то же, что:
char c = 0x41;
So
char a[5] = "ABCDE";
на самом деле это уже целочисленный массив из пяти (маленьких) целых чисел.
Если напечатать с использованием правильного спецификатора преобразования и модификатора длины, вы увидите, что вам нужно.
for (size_t i = 0; i < 5; ++i)
{
printf("%hhx ", a[i]);
}
Выход:
41 42 43 44 45
Чтобы показать читателю, что это должно быть шестнадцатеричным значением, можно было бы префикс значения, используя общепринятую нотацию 0x
.
printf("0x%hhx ", a[i]);
что дало тебе
0x41 0x42 0x43 0x44 0x45
Если бы вы показали это ребятам из Паскаля, вы, возможно, использовали бы
printf("$%hhx ", a[i]);
что дало тебе
$41 $42 $43 $44 $45
Чтобы увидеть самих персонажей только нам:
printf("%c ", a[i]);
и получить
A B C D E
Чтобы увидеть десятичные значения, используйте
printf("%d ", a[i]);
и получить
65 66 67 68 69
Вывод таков, что все дело в том, как вы представляете ("печатаете") одинаковые значения (содержимое элементов a
) . «Преобразование» происходит при создании представления одного и того же значения (путем печати и передачи правильных «инструкций»), то есть только во время вывода.
Поскольку вы ссылаетесь только на ASCII, это означает, что все значения равны ‹128, поэтому вы можете просто скопировать значения массива, используя цикл
char src[5] = "ABCDE";
uint8_t dst[5];
for (size_t i = 0 i < 5; ++i)
{
dst[i] = src[i];
}
или сразу скопировав соответствующий блок памяти
memcpy(dst, src, 5);
01.08.2018
OP
хочет также сохранитьhex
значения в массивеuint8_t
, как он упомянул. 01.08.2018