我想转换unsigned char testData[8] = {0xFF,0xF0,0x00,0xA0,0x00,0x00,0x00,0x99};
到String(Arduino变量类型)
目前我试试这个:
std::string str( reinterpret_cast<char*>(testData), 8);
// std::string str( testData, testData + sizeof testData / sizeof testData[0] );
String message = String(str.c_str());
但是返回char值的asci字符,这是有道理的。但我想要实现的是将数组中的所有位(8x8)解释为long long(64位int)并将此数值转换为其字符串表示形式。我想实现这一点,所以我可以用JSON将它发送到我的nodejs服务器(它不支持64位,所以我可能需要切两个)。
例如,如果我有:{0xFF,0xF0,0x00,0xA0,0x00,0x00,0x00,0x99} 例如,它的长期价值是:9894736399534 然后我想找回&#34; 9894736399534&#34;在我的String对象中。
答案 0 :(得分:1)
正如其他人所指出的,您所要做的就是将原始数据解释为(unsigned)long long,然后将该值存储在字符串中,例如:
#include <iostream>
#include <sstream>
#include <cstdlib>
int main(void)
{
unsigned char testData[8] = {0xFF,0xF0,0x00,0xA0,0x00,0x00,0x00,0x99};
unsigned long long data = *reinterpret_cast<unsigned long long*>(testData);
std::stringstream str;
//str << std::hex << data;
str << data;
std::cout << str.str() << '\n';
return EXIT_SUCCESS;
}
修改
以下解决方案依赖于String
构造函数将原始64位值转换为2个32位值表示形式,如果需要,可以将它们连接或单独使用。
这假设平台是小端的。
String lsdw = String(*reinterpret_cast<unsigned long*>(&testData[0]), HEX);
String msdw = String(*reinterpret_cast<unsigned long*>(&testData[4]), HEX);
String message = lsdw + msdw;
答案 1 :(得分:0)
首先需要将内存重新解释为64位int
指针,然后根据该内存区域中的数字创建一个字符串。
所以将char*
转换为unsigned long long*
,然后取消引用它并创建一个字符串。
此代码应该有效。
unsigned long long number = *(reinterpret_cast<unsigned long long *>(testData))
std::string stringNum = std::to_string(number);