我正在处理我的项目,现在我遇到了一个问题,即如何将 char 数组转换为 byte 数组?
例如:我需要将 char[9]
"fff2bdf1"
转换为一个字节数组,即 byte[4]
是 0xff,0xf2,0xbd,0xf1
.
原文由 Trung Phạm Khánh 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在处理我的项目,现在我遇到了一个问题,即如何将 char 数组转换为 byte 数组?
例如:我需要将 char[9]
"fff2bdf1"
转换为一个字节数组,即 byte[4]
是 0xff,0xf2,0xbd,0xf1
.
原文由 Trung Phạm Khánh 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设您要解析字符串中的十六进制值,并且两个字母始终构成一个字节值(因此您使用前导零),您可以使用 sscanf
像这样:
char input[] = "fff2bdf1";
unsigned char output[4];
for (int i=0; i<4; i++) {
sscanf(&input[i*2], "%02xd", &data[i]);
}
原文由 Karsten Koop 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这是一个小 Arduino 草图,说明了执行此操作的一种方法:
循环将继续转换,直到遇到空字符。
getNum
中使用的代码也只处理小写值。如果您需要解析大写值,则可以轻松更改。如果您需要解析两者,那么它只需要多一点代码,如果需要,我会留给您(如果您无法解决并需要它,请告诉我)。这将在转换后将
out
中包含的 4 字节值输出到串行监视器。编辑:如何使用不同长度的输入。
循环不关心有多少数据,只要有偶数个输入(每个输出字节有两个 ascii 字符)加上一个终止空值。当它遇到以 null 结尾的输入字符串时,它只会停止转换。
因此,要在上面的草图中进行更长的转换,您只需要更改输出的长度(以适应更长的数字)。 IE:
循环内的
4
不会改变。它正在将第一个数字移动到位。对于前两个输入(
"ab"
),代码首先将“a”转换为数字10
或十六进制A
。然后它将它向左移动 4 位,因此它位于字节的高四位:0A
到A0
。然后将第二个值B
简单地添加到给出的数字中AB
。