我使用以下代码将十六进制表示为 data = "\x35\x0d"
(即 5 和一个回车符)写入我的串行设备:
boost::asio::write(
*serial_port,
boost::asio::buffer(data.c_str(), data.size()),
boost::asio::transfer_at_least(data.size()),
error
);
如何将字符串“350d”转换为字节字符串以用于写入我的串行端口?并非我的所有命令都将被硬编码。谢谢。
最佳答案
这是我不久前为我正在开发的一个简单工具拼凑的一些代码。这包含双向转换。这不是唯一的方式,但这是一种方式。
// Convert binary data to hex string
std::string to_hex( const std::vector<uint8_t> & data )
{
std::ostringstream oss;
oss << std::hex << std::setfill('0');
for( uint8_t val : data )
{
oss << std::setw(2) << (unsigned int)val;
}
return oss.str();
}
// Convert hex string to binary data
std::vector<uint8_t> from_hex( const std::string & s )
{
std::vector<uint8_t> data;
data.reserve( s.size() / 2 );
std::istringstream iss( s );
iss >> std::hex;
char block[3] = {0};
while( iss.read( block, 2 ) )
{
uint8_t val = std::strtol( block, NULL, 16 );
data.push_back( val );
}
return data;
}
您需要各种 header :<cstdint>
, <iomanip>
, <sstream>
, <string>
, <vector>
.
关于c++ - 用于 ASIO 写入的十六进制字符串到字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637427/