Qt5 将字符转换为 8 位无符号值
Qt5 convert chars to 8bits unsigned values
我有两种方法可以将字符转换为它们代表的 8 位字节值。在第一个中,它给出了正确答案,但在第二个中,它给出了一个额外的 0,所以我不得不 ba.size()-1
。
我的问题是为什么我必须在第二个中这样做?我知道这很可能是 /0 终止符。如果我没有错?还有什么更好的办法吗?
// very simple test if we can take bytes and get them in decimal (0-255)format:
QByteArray ba("down came the glitches and burnt us in ditches and we slept after we ate our dead...");
for (int i = 0; i < ba.size(); ++i)
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[i]);
// very simple second way to do it...
int j = 0;
while (j < ba.size()-1){
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[++j]);
}
区别在于增量运算的无效使用。当您使用 ++j
时,您已经具有值 1
,因此您永远不会获得 0
索引。你也会得到比数组大小更大的最后一个索引。正确的做法是:
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[j++]);
我有两种方法可以将字符转换为它们代表的 8 位字节值。在第一个中,它给出了正确答案,但在第二个中,它给出了一个额外的 0,所以我不得不 ba.size()-1
。
我的问题是为什么我必须在第二个中这样做?我知道这很可能是 /0 终止符。如果我没有错?还有什么更好的办法吗?
// very simple test if we can take bytes and get them in decimal (0-255)format:
QByteArray ba("down came the glitches and burnt us in ditches and we slept after we ate our dead...");
for (int i = 0; i < ba.size(); ++i)
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[i]);
// very simple second way to do it...
int j = 0;
while (j < ba.size()-1){
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[++j]);
}
区别在于增量运算的无效使用。当您使用 ++j
时,您已经具有值 1
,因此您永远不会获得 0
索引。你也会得到比数组大小更大的最后一个索引。正确的做法是:
qDebug() << "Bytes are: "<< static_cast<quint8>(ba[j++]);