【发布时间】:2020-12-16 10:31:20
【问题描述】:
A 有一个用 C++ 编写的程序。它接收字节数组并将其转换为值。我对 C++ 有一些经验,但经过几天的研究,我意识到这还不够。
quint32 id = getWORD(&rawData[1]);
在我的情况下rawData = {0x03, 0xAD, 0x1D, 0xFA, 0x03, 0x02, 0x00, 0x00, 0x00, 0x3D, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00}
uint32_t getWORD(const char* buf)
{
uint32_t val;
memcpy(&val, buf, sizeof(val));
return val;
}
如果我理解正确,这种方法只需将此字节转换为 uint32_t 类型
然后,结果是:
QString result = QString("%1").arg((quint32) id, 8, 16, QChar('0')).toUpper()
我读过arg function here,但是有几十个不同的构造函数,不同的参数,我从来没有在Java或Kotlin中看到过类似的东西,所以不知道如何实现它。
感谢任何提示
UPD:
byte[] bytes = {(byte) 0xAD, (byte) 0x1D, (byte) 0xFA, (byte) 0x03};
int result = ByteBuffer.wrap(bytes).getInt(); // = -1390544381
但负值看起来不像正确的设备 ID
我已经考虑过String.format,但根据 QString 的文档:
QString QString::arg(uint a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) 常量
base 参数指定转换时使用的基数 将整数 a 转换为字符串。基数必须在 2 到 36 之间。
如果 fillChar 为 '0'(数字 0,ASCII 48),则语言环境的零为 用过的。对于负数,零填充可能出现在减号之前 签名。
所以我不确定 String.format 在这种情况下是否有帮助
【问题讨论】: