Mam pewien wynik programu, który jest 256-bitowym intem z biblioteki boost. Próbuję go przekonwertować na format binarny, ale podejrzewam, że coś jest nie tak.
uint256_t result;
std::cout.write(reinterpret_cast<char*>(&result), sizeof result);
Wyniki nie zdają testów, a powinny. Podejrzewam, że uint256_t
jest za duży, żeby to przekonwertować w ten sposób, ale na czym polega błąd - nie wiem.
Mogę to rozwiązać tak:
unsigned __int128 a = (unsigned __int128)result;
uint256_t b = result >> 128;
unsigned __int128 c = (unsigned __int128)b;
std::cout.write(reinterpret_cast<char*>(&a), sizeof a);
std::cout.write(reinterpret_cast<char*>(&c), sizeof c);
Wziąć górne i dolne 128 bitów mojego result i zapisać je jako unsigned __int128
. To działa. Ale czy jest jakiś bardziej elegancki sposób, żeby tyle nie kombinować i za jednym zamachem przekonwertować całego 256-bitowego inta?