C中的字符串到字节数组的十六进制

问题描述 投票:0回答:1

如何将具有十六进制值的字符串转换为具有这些十六进制值的字节数组?我正在使用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);

任何帮助将不胜感激。谢谢!

c parsing arduino hex microcontroller
1个回答
0
投票

我假设您需要一个十六进制值的数组,即来自字符串s的整数数组。从char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};开始,看来您想要一个char数组。如果在代码之后添加以下代码,则会得到一个名为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('}');

希望它会帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.