十六进制QString表示为无符号字符数组
问题描述:
具有某些用户输入的QString包含MAC地址,例如"68F542F9AB22"
。我需要将QString转换为数字的无符号字符数组[6],而不是ASCII表示。所以对于QString 68F542F9AB22
在第一个位置无符号的字符数组应该是104十六进制QString表示为无符号字符数组
答
你可以遍历您的QString,它切成两片,然后使用QString :: toUShort(& OK,16),它会给你你的十六进制字符串的ushort。
成才像
for(int i=0;i<6;++i)
{
QString hexString = yourstring.mid(i*2,2);
bool ok = false;
yourBuf[i] = (unsigned char) hexString.toUShort(&ok,16);
//if not ok, handle error
}
您务必做好一些检查您输入的字符串的正确长度,并做一些错误处理上转换错误。
希望这可能会帮助你。
答
我会做以下列方式:
QString s("68F542F9AB22");
assert(s.size() % 2 == 0);
std::vector<unsigned char> array;
for (int i = 0; i < s.size(); i += 2)
{
QString num = s.mid(i, 2);
bool ok = false;
array.push_back(num.toUInt(&ok, 16));
assert(ok);
}
+0
谢谢!它也可以工作 – MABC
答
你可以试试:
QString s = "68F542F9AB22";
unsigned char array[6];
if (s.length() % 2 == 0) { // test string length is even
for (unsigned long i = 0 ; i < s.length() ; i += 2) {
QString chunk = s.mid(i,2);
bool ok;
array[i/2] = static_cast<unsigned char>(chunk.toInt(&ok,16));
}
}
注意的是,上面的代码仅适用于甚至字符串(但对于MAC地址,它的确定) 。
,并测试你可以使用结果:
for (unsigned long i = 0 ; i < 6 ; i ++) {
std::cout<<"Array ["<<i<<"] = "<<static_cast<unsigned long>(array[i])<<std::endl;
}
是分离2再见2并插入到数组是好还是? – aghilpro
你的意思是使用QString :: at(int position)来获取QChar,然后尝试将其转换为int并插入到数组中?我正在寻找一个更简单的方法。 – MABC
@MABC这样的事情。为什么你需要这样的MAC?也许你有另一种解决方案。 – aghilpro