gpt4 book ai didi

将 IP 或 MAC 地址从字符串转换为字节数组(Arduino 或 C)

转载 作者:行者123 更新时间:2023-12-04 23:22:14 31 4
gpt4 key购买 nike

我会将 myString“100.200.300.400”转换为字节数组 [4]。我有点困惑,这是对的还是我需要使用 foreach 来读取单个数字?

String myString = "100.200.300.400";
byte myByteArray[4];
myString.getBytes(myByteArray,4);

最后我想打印到数组到串行。这应该是对的。

for (i=0; i<4; i++) {
Serial.print(myByteArray[i]);
Serial.print("."); //delimiter
}

我错了吗?我得到了 49,48,48,0 !

最佳答案

如果您尝试从 "100.150.200.250" 这样的字符串转换为 { 100, 150, 200, 250 } 这样的字节数组,您需要提取每个数字的字符串表示形式并将它们转换(解析)为二进制表示形式,然后再将它们存储在字节数组中。

您尝试执行此操作的方式只是将字符串的前四个字节(即 "100.")转换为每个字符的二进制表示形式,结果为{ 49、48、48、0 }。您可以在 ASCII table 中查找.

另请记住,当您将其存储在字节数组中时,它将仅支持 0 到 255 之间的值。

当您在小型微 Controller 上编程时,我建议您不要使用 String 类。当您的程序变得越来越大并且您开始使用大量字符串时,您可能会遇到麻烦。尝试学习如何使用字符数组来代替,您将避免遇到内存问题。请记住,Arduino 只有 2KB 的 RAM!

这是一个函数,您可以使用 strtoul() 函数进行转换:

void parseBytes(const char* str, char sep, byte* bytes, int maxBytes, int base) {
for (int i = 0; i < maxBytes; i++) {
bytes[i] = strtoul(str, NULL, base); // Convert byte
str = strchr(str, sep); // Find next separator
if (str == NULL || *str == '\0') {
break; // No more separators, exit
}
str++; // Point to next character after separator
}
}

然后您可以像这样调用它来转换 IP 地址(以 10 为基数):

const char* ipStr = "50.100.150.200";
byte ip[4];
parseBytes(ipStr, '.', ip, 4, 10);

或者像这样转换 MAC 地址(16 进制):

const char* macStr = "90-A2-AF-DA-14-11";
byte mac[6];
parseBytes(macStr, '-', mac, 6, 16);

关于将 IP 或 MAC 地址从字符串转换为字节数组(Arduino 或 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35227449/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com