2016-05-18 2 views
-4

У меня есть 19-разрядное число (64 бит и ВСЕГДА 19 цифр) и необходимо преобразовать его в 32-битный int.64-разрядное число до 2x 32 бит

2 32 бит должен быть способен преобразовать обратно к 19-значному номеру.

У кого-нибудь есть идея?

ответ

1

вы можете сделать это путем сдвига:

#include "stdio.h" 

uint64_t bigNum = 5678216589648569852; 
uint64_t merged = 0; 

uint32_t partA = 0; 
uint32_t partB = 0; 

//split 
partA |= bigNum; 
partB |= bigNum >> 32; 

//merge 
merged = partB; 
merged <<= 32; 
merged |= partA; 
+0

правой сдвигая целое число от реализации определяется поведение. – owacoder

+0

Думаю, здесь здесь неважно. Может быть, если 32-разрядные используются между расщеплением и слиянием. Если содержимое 32-битных ints не используется, это не имеет значения. Я * догадываюсь, что разбиение - это просто отправить int с помощью некоторого протокола, который поддерживает только 32 бит. –

+0

Существует еще одна проблема с использованием целых чисел со знаком. Если 'partA' или' partB' заканчиваются отрицательными, это повлияет на более высокие бит в 'a64' или' b64', что даст ошибочный результат. Как правило, всегда используйте целые числа без знака для побитовых операций. – owacoder

Смежные вопросы