数制翻译
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
};
}
在循环中使用重复的模和除运算进行通用整数基数转换。可以针对特定的碱基进行优化,但您还不必担心。
此外,您可能没有小数形式的数字。你有数字。除非你将它们存储为字符串,否则由计算机来存储它们,它会将它们存储为二进制。
您只需要按类似的顺序进行取模和除法:
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。
我有三个小数形式的数字,它们又使自己成为一个十进制数。 <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
};
}
在循环中使用重复的模和除运算进行通用整数基数转换。可以针对特定的碱基进行优化,但您还不必担心。
此外,您可能没有小数形式的数字。你有数字。除非你将它们存储为字符串,否则由计算机来存储它们,它会将它们存储为二进制。
您只需要按类似的顺序进行取模和除法:
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。