我们有一个用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函数的文章,但是有几十个不同的构造函数有不同的参数,而且我在java或kotlin中从未见过类似的东西,所以不知道如何实现它。
如果有任何提示,我将不胜感激
升级版本:
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参数指定将整数转换为字符串时要使用的基。底座必须介于2和36之间。
如果fillchar为“0”(数字0,ascii 48),则使用区域设置的0。对于负数,减号前可能会出现零填充。
所以我不确定string.format在这种情况下是否有用
1条答案
按热度按时间cotxawn71#
在java中,由于所有java整数类型都是有符号的,所以在打印时
int
对于默认格式,它将被解释为负数。但是,用于呈现十六进制数的格式化函数将其视为无符号。您尚未提供示例输入和输出,但java格式字符串的适当转换字符可能是
X
或者x
,这取决于字符是大写还是小写。前导空格默认为空格:输出: