使用场景
对于普通的场景,没有什么进阶要求。当然如果,你依然想要处于一个小白阶段,或者代码初级阶段,那也不需要了解!!
这里写出来仅仅是给那些需要的,或者需要跨过小白阶段的程序员。
写代码,不是靠走马观花完成的,不是我们想到哪就走到哪,总想着凑合着用,那只会让未来的你自食其果。何为积屎成山,还是自己都不愿意搬的屎山。不留后路就是屎山。
前期我们讲过,QString转QByteArray,不需要处理字节序的问题。那么是否我们就只需要直接填写,就高枕无忧了?
看看进阶版本,思考思考吧。
进阶版本:可选字节序转换
c
QByteArray doubleToQByteArray(double value, bool bigEndian) {
union {
double d;
quint64 i;
} converter;
converter.d = value;
QByteArray bytes;
bytes.resize(8);
if (bigEndian) {
// 大端序:高位在前
bytes[0] = (converter.i >> 56) & 0xFF;
bytes[1] = (converter.i >> 48) & 0xFF;
bytes[2] = (converter.i >> 40) & 0xFF;
bytes[3] = (converter.i >> 32) & 0xFF;
bytes[4] = (converter.i >> 24) & 0xFF;
bytes[5] = (converter.i >> 16) & 0xFF;
bytes[6] = (converter.i >> 8) & 0xFF;
bytes[7] = converter.i & 0xFF;
} else {
// 小端序:低位在前
bytes[7] = (converter.i >> 56) & 0xFF;
bytes[6] = (converter.i >> 48) & 0xFF;
bytes[5] = (converter.i >> 40) & 0xFF;
bytes[4] = (converter.i >> 32) & 0xFF;
bytes[3] = (converter.i >> 24) & 0xFF;
bytes[2] = (converter.i >> 16) & 0xFF;
bytes[1] = (converter.i >> 8) & 0xFF;
bytes[0] = converter.i & 0xFF;
}
return bytes;
}
qt-union-联合体基础讲解
提问
优秀的代码,往往在于合理做出扩展性。你是否想过,让它变的大小自动调整,而不是设定大小!