如何将4个字节连接成8个字节?
例子:
long var1 = 0x01011; //0001 0000 0001 0001
long var2 = 0x03034; //0011 0000 0011 0100
// MAGIC...
long result = 0x10113034; //0001 0000 0001 0001 0011 0000 0011 0100
unsigned int a = 0x01020304;
unsigned int b = 0x0a0b0c0e;
unsigned long long c = (((unsigned long long)a) << 32) + b;
// c=0x010203040a0b0c0e
using ul = unsigned long;
long concat(long var1, long var2) {
ul result = (static_cast<ul>(var1)<<16) | static_cast<ul>(var2);
return static_cast<long>(result);
}
这个函数返回你想要的结果,我没有进行过广泛的测试,但直觉上它应该像样例一样工作。
通过使用二进制运算符:
unsigned long var1 = 0x1011; //0001 0000 0001 0001
unsigned long var2 = 0x3034; //0011 0000 0011 0100
unsigned long result = (var1 << 16) | var2; //Magic!: 0001 0000 0001 0001 0011 0000 0011 0100
顺便说一下,我相信这是编码/计算的最快方式!
提示:在二进制操作中使用无符号数,否则可能会得到意想不到的结果!
result = (var1 << 16) + var2;
,意思是将变量var1
左移16位后加上var2
的值并将结果赋给result
变量。 - Igor Tandetnik