endianness - 如何确定包含 4 个十六进制值的 32 位字的十进制值?
问题描述
假设 RAM 中的字节 0 包含值 0x12。后续字节包含 0x34、0x45 和 0x78。在具有 32 位字的 Big-Endian 系统上,该字的十进制值是多少?
我知道对于 Big Endian 系统,单词的顺序是 0x78、0x45、0x34、0x12。我将每个值转换为十进制并得到 120、69、52、18。我想知道,为了获得单词的十进制值,我是将所有这些值加在一起(120 + 69 + 52 + 18),还是将它们解释为十进制数 (120695218) 中的数字吗?
解决方案
您知道如何将单个整数从十六进制转换为十进制吗?在大端系统上,您有一个整数值0x12344578
= ... + 5*16^2 + 7*16^1 + 8*16^0
。
如果您正在编写一个计算机程序以将一个单词打印为十进制,那么您已经将该单词作为二进制整数(十六进制是一种人类可读的二进制序列化格式,实际上并未在内部使用),并且您将进行重复除法10,每次使用余数作为低位。(所以你首先生成数字 LSD,以相反的打印顺序。)
对于一个程序,字节顺序不会是一个问题。您只需执行单词加载即可在寄存器中获取单词的整数值。
推荐阅读
- android - Android SDK 30 持久值存储
- python - json以excel或csv的指定格式输出数据
- lua - Lua 脚本配置
- python - pyqtgraph中带有箭头的自定义LinearRegionItem
- c++ - C4355 'this' 在基本成员初始化列表中使用
- python - 二进制格式的pdf
- mysql - MySQL Installer msi 的问题 - 看不到应该安装的产品
- javascript - 如何使用 rxjs(如 forkJoin 和 combineLatest)运行一系列请求,但无需等待 ALL 完成才能看到结果?
- html - 文本不适合 div
- java - 每次我请求位置时都显示 Toast,如何更改