与我的帖子linux 将字符串值作为十六进制转串行(已在 x86 系统上解决)有关,我在 i368 系统上遇到问题。该代码适用于 intel atom ubuntu 系统。但是在带有 ubuntu 的英特尔至强上,这不再起作用了。
这可能是小/大端的问题吗?
我使用了 Erik 提到的帖子的代码。
我正在使用这种方法进行转换
int convert(std::string str, unsigned char*& charArr)
{
// count the number of character pairs (i.e. bytes) in the string
// and dynamically allocate an array of the required size
const int numBytes = str.size() / 2;
charArr = new unsigned char[numBytes];
for (int i = 0; i < numBytes; ++i)
{
// grab two characters from the string...
std::string twoChars = str.substr(2 * i, 2);
// ...and convert them to an integer using a stringstream
int byte;
std::stringstream ss(twoChars);
ss >> std::hex >> byte;
// store the result in our char array
charArr[i] = byte;
}
}
通过调用方法
const std::string str ="8C000002008E";
unsigned char* toSend;
convert(str, toSend);
并写入串行端口:
int kWrite = write(mFd, toSend , sizeof(toSend));
串行设备对原子系统作出反应,但对至强没有反应。
我得到的回复说:未定义的格式或校验和错误