Как я могу объединить 4 байта в 8 в C ++? - PullRequest
3 голосов
/ 15 марта 2020

Как объединить 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

Ответы [ 3 ]

2 голосов
/ 15 марта 2020

Используйте сдвиги и суммы для объединения элементов. В этом случае вы объединяете 2 4-байтовых входа в один длинный 8-байтовый.

unsigned int a = 0x01020304;
unsigned int b = 0x0a0b0c0e;
unsigned long long c = (((unsigned long long)a) << 32)  + b;
// c=0x010203040a0b0c0e
0 голосов
/ 16 марта 2020

Возможно, самый простой способ:

Используя бинарные операторы:

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

Кстати, я считаю, что это самый быстрый способ его кодирования / вычисления !

Подсказка: используйте числа без знака для бинарных операций, потому что в противном случае это может привести к неожиданным результатам!

0 голосов
/ 16 марта 2020
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);
}

Эта функция возвращает желаемый результат, я не тестировал его подробно, но интуитивно он должен работать как примеры.

...