Dav*_*ide 2 c arrays byte bytearray arduino
我会将myString"100.200.300.400"转换为字节数组[4].我是一个"有点"困惑,这是对的还是我需要使用foreach来读取一个数字?
String myString = "100.200.300.400";
byte myByteArray[4];
myString.getBytes(myByteArray,4);
Run Code Online (Sandbox Code Playgroud)
最后我想将数组打印到串口.这应该是正确的.
for (i=0; i<4; i++) {
Serial.print(myByteArray[i]);
Serial.print("."); //delimiter
}
Run Code Online (Sandbox Code Playgroud)
我错了吗?我有49,48,48,0!
如果你想从一个字符串就像"100.150.200.250"字节数组一样{ 100, 150, 200, 250 },你需要提取字符串表示每个号码和转换(解析)他们到二进制表示将它们存储在字节数组中之前.
你试图这样做的方式,你只是将字符串中的前四个字节转换"100."为每个字符的二进制表示,结果证明是这样{ 49, 48, 48, 0 }.你可以在ASCII表中查找.
还要记住,当您将其存储在字节数组上时,它只支持0到255之间的值.
当您在小型微控制器上编程时,我建议不要使用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
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样调用它来转换IP地址(基数为10):
const char* ipStr = "50.100.150.200";
byte ip[4];
parseBytes(ipStr, '.', ip, 4, 10);
Run Code Online (Sandbox Code Playgroud)
或者像这样转换MAC地址(基数为16):
const char* macStr = "90-A2-AF-DA-14-11";
byte mac[6];
parseBytes(macStr, '-', mac, 6, 16);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9768 次 |
| 最近记录: |