gpt4 book ai didi

arrays - 如何将数字转换为特定的字节数组?

转载 作者:行者123 更新时间:2023-12-04 07:22:51 25 4
gpt4 key购买 nike

我想将一个数字(例如 1000)转换为一个非常具体的 ByteArray。
至少我猜它是一个字节数组,因为它说它是一个。
@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\xc2\0\0\0X\0\0\x3)\0\0\x2"\0\0\0\xca\0\0\0w\0\0\x3!\0\0\x2\x1a\0\0\0\0\0\0)
(此 ByteArray 用于 vlc 的“vlc-qt-interface.ini”)
我不知道这个字节数组使用的是什么格式,我自己还无法解码。
你知道如何解码它,然后将一个数字编码成这种格式吗?
这种格式可能至少包含两个数字,可能是四个(我想转换为与使用的数字相同数量的数字)。

最佳答案

这比看起来要棘手一些。有关尽可能简短的答案,请参阅此错误报告(打开),它基本上说 restoreGeometry 例程是 too complicated .错误报告中的一些批评是什么会让你很难做你可能打算做的事情。
更长的答案是它是一个 QByteArray,它作为 saveGeometry() 的结果被写出。在开始设置几何时,相同的 QByteArray 被反馈到其中。您发布的实际字符串是一个 ini 转义字符串:https://doc.qt.io/qt-5/qsettings.html

QSettings will accept Latin-1 encoded INI files, but generate pure ASCII files, where non-ASCII values are encoded using standard INI escape sequences.


据我所知,几何结构没有记录在案。但是,在restoreGeometry() 函数中查看qwidget.cpp 会发现以下内容:
它以一个神奇的 32 位数字 0x1D9D0CB 开头(\x1\xd9\xd0\xcb 编码时)。接下来的 16 位是“主要版本”,之后的 16 位是“次要版本”。然后,按顺序:
const quint32 magicNumber = 0x1D9D0CB
quint16 majorVersion;
quint16 minorVersion;
QRect restoredFrameGeometry;
QRect restoredGeometry;
QRect restoredNormalGeometry;
qint32 restoredScreenNumber;
quint8 maximized;
quint8 fullScreen;
qint32 restoredScreenWidth = 0;
每个 QRect 似乎按左、上、右、下的顺序排列:
QDataStream &operator<<(QDataStream &s, const QRect &r)
{
if (s.version() == 1)
s << (qint16)r.left() << (qint16)r.top()
<< (qint16)r.right() << (qint16)r.bottom();
else
s << (qint32)r.left() << (qint32)r.top()
<< (qint32)r.right() << (qint32)r.bottom();
return s;
}
尚不清楚 QRect 是否使用版本 1 或其他版本,但根据编码字符串的粗略大小,我很确定它将是 16 位。
我不确定您实际上试图影响哪些几何图形。与其尝试编码和更改这些,我建议您想出一个简单的 QT 程序,您可以打开并使用自己的 QSettings 来保存所需的大小并加载到 ini 文件中以备后用。
答案的完整性:当 saveGeometry被调用,它返回一个 QByteArray,然后在 QSettings 中设置/保存。
来自“extended.cpp”(在 VLC 中)的这段代码片段似乎在加载时恢复它,如果找不到设置,则默认大小为 400、200:
if( !restoreGeometry( getSettings()->value("EPanel/geometry").toByteArray() ) )
{
resize( QSize( 400, 280 ) );

MainInterface *p_mi = p_intf->p_mi;
if( p_mi && p_mi->x() > 50 )
move( ( p_mi->x() - frameGeometry().width() - 10 ), p_mi->y() );
else
move ( 450 , 0 );
}

关于arrays - 如何将数字转换为特定的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68385842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com