如何将字节数组的字符串转换为字节数组

Posted

技术标签:

【中文标题】如何将字节数组的字符串转换为字节数组【英文标题】:How to convert the string of a byte array to a byte array 【发布时间】:2022-01-23 00:07:33 【问题描述】:

这可能看起来有点愚蠢,但我在我的 RFID 卡上写入数据并且我以这些形式写入:

0x31,0x32,0x33,0x39

我目前在一个字符串中拥有它

"0x31,0x32,0x33,0x39"

有没有办法从字符串传递到字节数组? 提前致谢!

这是我到目前为止的代码,但真的不知道如何使它工作对不起,我是新人,但我需要按特定顺序使用所有这些代码吗?

String str = "0x31,0x32,0x33,0x39";
byte Myarray[18];
void setup() 
  // put your setup code here, to run once:
  Serial.begin(9600);

int i = 0;
void loop() 
  for (i; i<str.length();++i) 
  Myarray[i] = strtol(str, 0, 16);
  
Serial.println(Myarray);

【问题讨论】:

您可以遍历字符串,使用strtoksscanf和/或strtol等函数的组合来转换每个十六进制字节的字符串表示形式到一个实际的字节。 array[i] = strtol(str, 0, 16) 并将其放在一个循环中。 Tesseract_,目标数组有最大尺寸吗? 在这种情况下恢复莫妮卡,我最多存储 18 个十六进制数字 如果你存储 18 个十六进制数字,为什么 Myarray 只有 16 个字节长? 【参考方案1】:

您可以使用 C 函数 strtok 来标记字符串。您可以使用strtol 将字符串转换为数字。

  char data[] = "0x31,0x32,0x33,0x39";
  byte arr[4];
  int length = 0;
  const char* delim = ",";
  char* tok = strtok(data, delim);
  while (tok && length < sizeof(arr)) 
    arr[length++] = strtol(tok, NULL, 16);
    tok = strtok(NULL, delim);
  

  for (int i = 0; i < length; i++) 
    Serial.print(arr[i], HEX);
    Serial.print(' ');
  

注意:strtok 将更改data。它将用字符串终止字符替换分隔符,

【讨论】:

我想要做的是它返回一个像这样的字节数组:0x31,0x32,0x33,0x39 这就是它的作用,我在这段代码中尝试了多个变量,但它没有工作:/ 它是arr 数组 是的,没有这些 -> "" 基本上是我的评论的字节数组我尝试了 arr 但它没有给我与预期相同的结果 arr 结尾与byte arr[] = 0x31,0x32,0x33,0x39; 相同 我想我知道这个问题,它实际上是 byte arr[] = 31,32,33,39 而不是 byte arr[] = 0x31,0x32,0x33,0x39 还有什么我以前在卡片上写字时只采用这种格式【参考方案2】:

0x31 = 49 所以 我可以这样写:

49,50,51,57

这更容易创建。

【讨论】:

以上是关于如何将字节数组的字符串转换为字节数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为字节数组? [关闭]

如何将base64位的字节数组转换成图片并显示

如何将字节数组转换为字符串? [复制]

如何将十六进制字符串转换为字节数组? [复制]

错误 1075:从 UDF 接收到一个字节数组。无法确定如何将字节数组转换为字符串

如何在 JavaScript 中使用字节数组将字符串转换为 base64 编码?