C++将字节二进制值转换为字符串
答
你可能需要六个字节序列像这样格式化:
aa:bb:cc:dd:ee:ff
其中aa
是十六进制格式的第一个字节。
像这样的东西应该做的:
char MAC[6]; //< I am assuming this has real content
std::ostringstream ss;
for (int i=0; i<6; ++i) {
if (i != 0) ss << ':';
ss.width(2); //< Use two chars for each byte
ss.fill('0'); //< Fill up with '0' if the number is only one hexadecimal digit
ss << std::hex << (int)(MAC[i]);
}
return ss.str();
如果你非常想这样做了石膏般的风格(从您的标题在这里猜测),你可以创建一个MAC类中,实现ostream的运营商为它(像我的代码)并使用boost::lexical_cast
。
答
- 确保它是空值终止
- 你需要知道什么编码字符串。如果它是ASCII,一个简单的std :: string STR((字符*)your_buffer ) 会做。 your_buffer应该是一个无符号的字符。如果不是,我们需要更多信息。
答
不确定是否表示转换或转换。如果转换,那么它取决于你想要的形式。你可能想要Hex,base-64,octal,...
如果你想要十六进制,请考虑STLSoft的format_bytes()
函数,它可以进行各种排序和分组。
如果您想要base-64,请考虑b64 library。
HTH
[编辑]与在OP编辑行,全面实现了一套将是:
#include <stlsoft/conversion/byte_format_functions.hpp>
#include <stdio.h>
int main()
{
unsigned char mac[6];
char result[STLSOFT_NUM_ELEMENTS(mac) * 3];
stlsoft::format_bytes(mac, sizeof(mac), &result[0], STLSOFT_NUM_ELEMENTS(result), 1, ":");
puts(result);
return 0;
}
没有必要在这种情况下从format_bytes()
检查返回值,因为你传入了足够的写入缓冲区。在实际情况下,你要检查
你想在结果字符串中做什么?你想要一个字节的文本表示(例如十六进制)还是你想实际将6个字节解释为ASCII(或其他编码)? – Joe 2009-06-26 22:54:35
我正在寻找文本表示,所以是十六进制。 – aHunter 2009-06-26 22:58:15
或者它是一个48位数字?如果是这样,它是什么编码,什么是排序? – patros 2009-06-26 22:58:18