【问题标题】:String Hex to Byte Array字符串十六进制到字节数组
【发布时间】:2020-05-07 06:57:57
【问题描述】:

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

【问题讨论】:

  • 我不会将 Arduino(库)用于任何目的,至少不会用于学习目的。至于怎么转换,man strtoul.
  • char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; -> "警告:从 'int' 到 'char' 的转换溢出将值从 '255' 更改为 '-1' [-Woverflow]" .
  • @HamidReza 是有道理的,但我该如何为此编写算法?

标签: c++ parsing arduino hex microcontroller


【解决方案1】:

我假设您需要一个十六进制值数组,即来自字符串s 的整数数组。 来自 char test[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; 的 Thogh,看来您想要一个 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('}');

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2013-10-13
    • 2011-10-01
    • 1970-01-01
    • 2011-10-02
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多