Передача строки символов в кавычках в массив байтов ascii2 в C - PullRequest
0 голосов
/ 09 марта 2019

Как мне легко преобразовать строку символов в кавычках в массив значений ascii2?

Например:

char ST1[5] = "12345";

до

char DST1[5] = { 0x31, 0x32, 0x33, 0x34, 0x35 }; //string of bytes

Ответы [ 3 ]

1 голос
/ 09 марта 2019

Единственная разница между определениями ST1 и DST1 заключается в молчаливом предположении, что целевым набором символов является ASCII, по крайней мере для цифр.

Вот еще одна альтернатива:

char CST1[5] = { '1', '2', '3', '4', '5' };

Обратите внимание, что ни один из этих char массивов не является правильными строками C, потому что у них всех нет нулевого терминатора. Если вы хотите определить массив, который является строкой C, вы должны использовать этот синтаксис:

char SST1[] = "12345";

Обратите внимание на отсутствующую длину между []: компилятор определит длину массива из инициализатора и добавит нулевой терминатор, следовательно, длину a 6.

C-строки могут быть скопированы с strcpy, char массивы, которые не имеют нулевого терминатора, должны быть скопированы с memcpy или memmove.

1 голос
/ 09 марта 2019

Практически ничего.

Во-первых, помните, что строковые литералы, такие как "12345", имеют дополнительный «нулевой» байт в конце. Таким образом, вместо обработки инициализации массива "12345" массивом из 5 элементов, на самом деле это массив из 6 элементов, поэтому этот оператор инициализации более уместен:

char ST1[6] = "12345";

Или просто:

char ST1[] = "12345"; // где размер "6" автоматически выводится.

Что эквивалентно:

char DST1[] = {0x31,0x32,0x33,0x34,0x35,0x00};

И когда у вас есть массив из 6 элементов, вы можете передать его, как если бы он имел только 5:

Итак, если у вас есть код, который ожидает работать с массивом из 5 символов:

 void foo(char DST1[])
 {
     for(int i = 0; i < 5; i++)
     { 
         process(DST1[i]);
     }
 }

Вы можете вызвать его следующим образом:

char ST1[]="12345";
foo(ST1);
0 голосов
/ 09 марта 2019

Один на всех, один ответ на кастинг.Простой способ сделать это:

int main () {
    int i;
    char ST1[5]="12345";
    for (i=0;i<5;i++)
        printf("%d\n",(int)ST1[i]);
    return 0;
}

Так же, как я напечатал, вы можете сохранить его, рассчитать, используя его или что-нибудь еще.И, как я вижу, вы хотите эти числа в шестнадцатеричных.Для этого просто измените местозаполнитель printf с помощью отсюда - printf () для hex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...