C ++: Как я могу привести int к unsigned long и не менять биты?Я хочу упаковать и распаковать значения в память.Размер слова составляет 64 бита.
Этот фрагмент иллюстрирует проблему:
int v1 = -2; // 0xfe
unsigned long v2=(unsigned long)v1; // 0xfffe, I want 0x00fe
Простое решение:
unsigned long v2=(unsigned int)v1; // 0x00fe
Однако этот код находится в шаблонегде целевой тип является параметром, поэтому мне пришлось прибегнуть к этому:
uint64 target = mem[index] & mask;
uint64 v;
if (value < 0) {
switch (bits) {
case 8:
v = (uint8)value;
break;
case 16:
v = (uint16)value;
break;
case 32:
v = (uint32)value;
break;
}
} else {
v = value;
}
v = v << lShift;
target |= v;
mem[index] = target;
Предположим, например, что типом "value" является int (16 бит) и биты = 16.Цель состоит в том, чтобы замаскировать биты в памяти для значения и заменить их.
Кто-нибудь знает более простой способ?