简单使用Linux printf 将十进制转换为十六进制

本文介绍了如何在Linux命令行中使用printf和bc命令快速进行十进制、十六进制和八进制之间的转换,提供了解决开发和问题排查中基础数值转换问题的方法。

在开发和排查问题过程中,有时我们需要做一些进制的转换,以下是一些快速的小技巧:

下面的是 十进制转换为十六进制:

❯ printf  "0x%x\n" 100
0x64

还可以把 十六进制转为十进制:

❯ printf "%d\n" 0x64
100

其实中引号中%x为要转换的格式,\n为换行“new line”

还可以十进制转换为八进制

❯ printf "%o\n" 100
144

另外使用bc命令进行转换也可的大多数 Linux 发行版中,bc 工具已经预装

以下十进制转换为十六进制:

❯ echo "obase=16; 100" | bc
64

以下十六进制转为十进制:

❯ echo "ibase=16; 64" | bc
100

以下十进制转换为八进制:

❯ echo "obase=8; 100" | bc
144

### 回答问题: 在嵌入式系统开发、内核配置、分区表设置等场景中,经常需要将**十进制的 MB 数值转换十六进制地址**,以便用于配置文件(如 `.ini` 文件)、U-Boot 配置、烧录脚本等。 --- ## ✅ 一、转换原理 1MB = 1024KB = 1024 × 1024 字节 = **1,048,576 字节** 所以,**将 MB 数值转换为字节数**的公式是: ``` 字节数 = MB数 × 1048576 ``` 然后再将字节数转换十六进制表示。 --- ## ✅ 二、C语言实现(整数 MB 转换十六进制地址) ```c #include <stdio.h> int main() { int mb; printf("请输入 MB 数值: "); scanf("%d", &mb); unsigned long long bytes = (unsigned long long)mb * 1024 * 1024; printf("十六进制地址为: 0x%llx\n", bytes); return 0; } ``` ### 示例输出: ``` 请输入 MB 数值: 7 十六进制地址为: 0x700000 ``` --- ## ✅ 三、Shell 命令实现(Linux 环境下) 你也可以使用 `bash` 命令快速转换: ```bash mb=7 printf "0x%x\n" $(( mb * 1024 * 1024 )) ``` ### 输出: ``` 0x700000 ``` --- ## ✅ 四、常见 MB 到十六进制对照表 | MB 数值 | 十六进制表示 | |---------|--------------| | 1 | 0x100000 | | 2 | 0x200000 | | 3 | 0x300000 | | 4 | 0x400000 | | 5 | 0x500000 | | 6 | 0x600000 | | 7 | 0x700000 | | 8 | 0x800000 | | 16 | 0x1000000 | | 32 | 0x2000000 | | 64 | 0x4000000 | | 128 | 0x8000000 | | 256 | 0x10000000 | --- ## ✅ 五、进阶:带偏移量的地址计算(例如:起始地址 + 大小) 如果你想计算某个分区的下一个分区的起始地址: ```c #include <stdio.h> int main() { unsigned long long start_addr = 0x100000; // 起始地址 int size_mb = 7; // 分区大小(MB) unsigned long long end_addr = start_addr + (unsigned long long)size_mb * 1024 * 1024; printf("起始地址: 0x%llx\n", start_addr); printf("结束地址: 0x%llx\n", end_addr); return 0; } ``` ### 输出: ``` 起始地址: 0x100000 结束地址: 0x800000 ``` --- ## ✅ 总结: - **1MB = 0x100000** - 转换公式:`MB × 1048576 = 字节数` - 可用 C 语言、Shell 脚本或计算器实现 - 常用于嵌入式系统的分区配置、U-Boot 设置、镜像打包等 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值