我有十进制形式的三个数字,它们使自己再多一个十进制数。 < 120,111,200> - (120 * 256 + 111)* 256 + 200 = 7892936 - 十进制。我保留这个数字是因为我有一个可变的字节数来写这个数字。
问:如何执行反向操作?如果我需要转换 7892936至< 120,111,200>?
Drawing up a hexadecimal number from several decimal numbers
答案 0 :(得分:2)
您可以使用位掩码和右移。以下可能有所帮助:
std::array<std::uint8_t, 4> convert(std::uint32_t u)
{
return {
(u >> 24) & 0xFF,
(u >> 16) & 0xFF,
(u >> 8) & 0xFF,
u & 0xFF
};
}
答案 1 :(得分:1)
在循环中使用重复的模运算和除法运算进行通用整数基数转换。特定基础的优化是可能的,但不应该真正关注你。
此外,您可能没有十进制形式的数字。你有数字。除非您将它们存储为字符串,否则由计算机来存储它们,并将它们存储为二进制文件。
答案 2 :(得分:1)
你只需要按照类似的顺序进行模数和除法:
int val = 7892936;
while(val > 0){
int mod = val%256;
print mod;
val /= 256;
}
结果将是:
200
111
120
答案 3 :(得分:1)
int bigNumber = 7892936;
int a = bigNumber & FF;
int b = (bigNumber & FF00) >> 8;
int c = (bigNumber & FF0000) >> 16;
答案 4 :(得分:1)
分别用ff,ff00和ff0000执行AND。