#include <bitset>
#include <iostream>
std::bitset<128>
starch_32 (const std::bitset<32> &input)
{
std::bitset<128> output;
for (size_t i = 0; i < input.size(); ++i) {
// If `input[N]` is `true`, set `output[N*4, N*4+4]` to true.
if (input.test (i)) {
const size_t output_index = i * 4;
output.set (output_index);
output.set (output_index + 1);
output.set (output_index + 2);
output.set (output_index + 3);
}
}
return output;
}
// Example with 0xC.
int main() {
std::bitset<32> input{0xcf00};
auto result = starch_32 (input);
std::cout << std::hex << result.to_ullong() << "\n";
}
ICAgICNpbmNsdWRlIDxiaXRzZXQ+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAKICAgIHN0ZDo6Yml0c2V0PDEyOD4gCiAgICBzdGFyY2hfMzIgKGNvbnN0IHN0ZDo6Yml0c2V0PDMyPiAmaW5wdXQpCiAgICB7CiAgICAJc3RkOjpiaXRzZXQ8MTI4PiBvdXRwdXQ7CiAgICAJCiAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAvLyBJZiBgaW5wdXRbTl1gIGlzIGB0cnVlYCwgc2V0IGBvdXRwdXRbTio0LCBOKjQrNF1gIHRvIHRydWUuCiAgICAgICAgICAgIGlmIChpbnB1dC50ZXN0IChpKSkgewogICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG91dHB1dF9pbmRleCA9IGkgKiA0OwogICAgICAgICAgICAKICAgICAgICAgICAgICAgIG91dHB1dC5zZXQgKG91dHB1dF9pbmRleCk7CiAgICAgICAgICAgICAgICBvdXRwdXQuc2V0IChvdXRwdXRfaW5kZXggKyAxKTsKICAgICAgICAgICAgICAgIG91dHB1dC5zZXQgKG91dHB1dF9pbmRleCArIDIpOwogICAgICAgICAgICAgICAgb3V0cHV0LnNldCAob3V0cHV0X2luZGV4ICsgMyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG91dHB1dDsKICAgIH0KICAgIAogICAgLy8gRXhhbXBsZSB3aXRoIDB4Qy4gCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBzdGQ6OmJpdHNldDwzMj4gaW5wdXR7MHhjZjAwfTsKICAgIAogICAgICAgIGF1dG8gcmVzdWx0ID0gc3RhcmNoXzMyIChpbnB1dCk7CiAgICAgICAgCiAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6aGV4IDw8IHJlc3VsdC50b191bGxvbmcoKSA8PCAiXG4iOwogICAgfQ==