Я пробую этот код, где я сначала разбиваю число uint64 на массив uint8, а затем объединяю указанный массив обратно в исходный номер.
Однако, когда я пытаюсь распечатать число out
, кажется, что оно возвращает максимальное значение uint64.
uint8 buf[8];
uint64 test = 123456789012;
uint64 out = 0;
Uint64toUint8Arr(buf, test, 0);
out = Uint8ArrtoUint64(buf, 0);
std::cout << "out is " << out << std::endl;
где мои функции определены как:
void Uint64toUint8Arr (uint8* buf, uint64 var, uint32 lowest_pos)
{
buf[lowest_pos] = (var & 0x00000000000000FF) >> 0 ;
buf[lowest_pos+1] = (var & 0x000000000000FF00) >> 8 ;
buf[lowest_pos+2] = (var & 0x0000000000FF0000) >> 16 ;
buf[lowest_pos+3] = (var & 0x00000000FF000000) >> 24 ;
buf[lowest_pos+4] = (var & 0x000000FF00000000) >> 32 ;
buf[lowest_pos+5] = (var & 0x0000FF0000000000) >> 40 ;
buf[lowest_pos+6] = (var & 0x00FF000000000000) >> 48 ;
buf[lowest_pos+7] = (var & 0xFF00000000000000) >> 56 ;
}
uint64 Uint8ArrtoUint64 (uint8* var, uint32 lowest_pos)
{
return (var[lowest_pos+7] << 56) |
(var[lowest_pos+6] << 48) |
(var[lowest_pos+5] << 40) |
(var[lowest_pos+4] << 32) |
(var[lowest_pos+3] << 24) |
(var[lowest_pos+2] << 16) |
(var[lowest_pos+1] << 8) |
(var[lowest_pos] << 0);
}
Мой вопрос в том, что я ошибся, разделив или объединив номер uint64? Я сделал аналогичную функцию для типа uint32, и все было в порядке.
std::cout << "out is " << out << std::endl;
вC
. - person chux - Reinstate Monica   schedule 04.09.2014