【问题标题】:how can I determine the decimal value of a 32bit word containing 4 hexadecimal values?如何确定包含 4 个十六进制值的 32 位字的十进制值?
【发布时间】:2019-02-15 20:37:19
【问题描述】:
假设 RAM 中的字节 0 包含值 0x12。后续字节包含 0x34、0x45 和 0x78。在具有 32 位字的 Big-Endian 系统上,该字的十进制值是多少?
我知道对于 Big Endian 系统,单词的顺序是 0x78、0x45、0x34、0x12。我将每个值转换为十进制并得到 120、69、52、18。我想知道,为了获得单词的十进制值,我是将所有这些值加在一起(120 + 69 + 52 + 18),还是我应该将它们解释为十进制数 (120695218) 中的数字吗?
【问题讨论】:
标签:
endianness
cpu-architecture
【解决方案1】:
您知道如何将单个整数从十六进制转换为十进制吗?在大端系统中,整数值为 0x12344578 = ... + 5*16^2 + 7*16^1 + 8*16^0。
如果您正在编写一个计算机程序以将单词打印为十进制,那么您已经将单词作为 binary 整数(十六进制是二进制的人类可读序列化格式,实际上并未使用内部),并且您将重复除以 10,每次使用余数作为低位。 (所以你首先生成数字 LSD,以相反的打印顺序。)
对于一个程序,字节序不会成为问题。你只需做一个单词加载来获取寄存器中单词的整数值。