c - 为什么我指定“%.2x”时会得到 8 个十六进制数字
问题描述
我想打印浮点数的十六进制表示,但有一些f
s 被意外打印。
这是我正在使用的代码:
float f = 0.2;
char *ptr = (char*)&f;
for (int i = 0; i < sizeof(float); i++)
printf("%.2x\n", ptr[i]);
这就是我得到的:
ffffffcd
ffffffcc
4c
3e
解决方案
该代码使用不正确的格式说明符导致未定义的行为。%x
仅适用于unsigned int
,但您给出类型的参数char
。
您可以通过更改以下类型来解决此问题ptr
:
unsigned char *ptr = (char*)&f;
从技术上讲, printf 的参数应该被强制转换为,但通常认为依赖提升为even forunsigned int
的非负值是安全的。int
%x
推荐阅读
- java - 使用 FK“重用”保存实体
- php - .Htaccess 删除 .php 和 url 重写不能一起工作
- sqlalchemy - 有没有办法为引擎建立的所有连接设置自动提交为真?
- c - 如何创建可变数量的 pthread?
- java - 用于 JUnit 测试的模型 JNDI 数据源
- precision - CVXPy 中的求解器似乎对初始条件敏感、不精确或不兼容
- laravel - 如何显示动态添加的数组字段数。Laravel-vue.js
- c++ - 如何定义仅存在于 Visual Studio 编辑器中的宏?
- php - 在php中按日期分组对象数组
- django - 如何使用 Django 构建将网桥连接到本地服务器的数据库 API?