如果你想從像"100.150.200.250"
字符串得到一個字節數組像{ 100, 150, 200, 250 }
,你需要提取字符串表示的每個數字和轉換(解析)他們到二進制表示將它們存儲在字節數組中之前。
您試圖做到這一點的方式,只是將字符串中的前四個字節(即"100."
)轉換爲每個字符的二進制表示形式,其結果爲{ 49, 48, 48, 0 }
。你可以看看ASCII table。
還記得,因爲你是存儲這個字節數組,它只會從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
}
}
然後你可以這樣調用轉換一個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);
49更大的是ASCII碼字符「1」,48是「0」等等。所以你得到了預期的結果。 –
如果你想將它轉換爲一個字節數組,它聽起來像你只是想要的數字。問題是你有兩個大於255的數字,你不能將一個大的數字存儲到一個字節中。 –
@DavidHoelzer最基本的問題是,OP正在嘗試將字符串轉換爲數字,而不是字符串轉換爲字節數組。 –