Строка из шестнадцатеричного в байтовый массив - PullRequest
0 голосов
/ 07 мая 2020

Как преобразовать строку с шестнадцатеричными значениями в массив байтов с этими шестнадцатеричными значениями? Кстати, я использую Arduino.

Это:

String s = "0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff";

Необходимо преобразовать в это:

char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};

Я использовал следующую процедуру. Он преобразует его, однако каждое шестнадцатеричное значение сохраняется как символ, а не шестнадцатеричное значение:

unsigned int str_len = s.length()+1;
char charArray[str_len];
s.toCharArray(charArray, str_len);

1 Ответ

0 голосов
/ 07 мая 2020

Я предполагаю, что вам нужен массив шестнадцатеричных значений, т.е. массив целых чисел из String s. Thogh из char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};, кажется, вам нужен массив символов. Если вы добавите приведенный ниже код после кода, вы получите целочисленный массив с именем hexn, который будет содержать ваши шестнадцатеричные значения.

    int i,hexn[20],k=0,j;
    char tmp[8];
    for (i=0;charArray[i]!='\0' ;i++){
        if(charArray[i]=='x' && charArray[i-1]=='0'){
            j=0;
            while(charArray[i]!=','){
                tmp[j++]=charArray[++i];
                if (charArray[i]=='\0')
                    break;
            }
            sscanf(tmp,"%x",&hexn[k++]);
        }
    }

Теперь, если вам действительно нужно char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};, я полагаю, вы не получаете открывающая и закрывающая фигурные скобки, т.е. { и }. в этом случае вы можете использовать оператор конкатенации. Вы можете сделать что-то подобное перед своим кодом:

String s2 = String('{') + s + String('}');

Надеюсь, это вам поможет.

...