数制翻译

Translation of number systems

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

Q: How can I carry out the reverse operation?? If I need to convert 7892936 to <120, 111, 200>?

您可以使用位掩码和右移。以下内容可能有所帮助:

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

在循环中使用重复的模和除运算进行通用整数基数转换。可以针对特定的碱基进行优化,但您还不必担心。

此外,您可能没有小数形式的数字。你有数字。除非你将它们存储为字符串,否则由计算机来存储它们,它会将它们存储为二进制。

您只需要按类似的顺序进行取模和除法:

int val = 7892936;
while(val > 0){
    int mod = val%256;
    print mod;
    val /= 256;
}

因此结果将是:

200
111
120
int bigNumber = 7892936;
int a = bigNumber & FF;
int b = (bigNumber & FF00) >> 8;
int c = (bigNumber & FF0000) >> 16;

分别与 ff、ff00 和 ff0000 执行 AND。