数字系统的翻译

时间:2015-02-04 10:20:13

标签: c++ algorithm int decimal

我有十进制形式的三个数字,它们使自己再多一个十进制数。 < 120,111,200> - (120 * 256 + 111)* 256 + 200 = 7892936 - 十进制。我保留这个数字是因为我有一个可变的字节数来写这个数字。

  

问:如何执行反向操作?如果我需要转换   7892936至< 120,111,200>?

Drawing up a hexadecimal number from several decimal numbers

5 个答案:

答案 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
    };
}

Live example

答案 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。