大家来扫下盲,“printf("%.2x", start[i]);”格式中的小数点是什么意思?

紫色动力 2011-08-13 12:52:05
RT,我知道格式字符串的“%x”的意思是以无符号十六进制表示的整数,“2”的意思是输出两位。小数点的意思我就不懂了,请各位指点,谢谢,呵呵!
...全文
2559 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
穗九 2012-11-28
  • 打赏
  • 举报
回复
引用 6 楼 icemornings 的回复:
摘自K&R《C程序设计语言》: 点号,用语分隔字段宽度和精度 表示精度的数。对于字符串,它指定打印的字符的最大个数;对于e、E或f转换,它指 定打印的小数点后的数字位数;对于g或G转换,它指定打印的有效数字位数;对于整 型数,它指定打印的数字位数(必要时可填充位0以达到要求的宽度)。 -------------------
今天碰到和楼主一样的疑问!谢谢六楼的解答!
heiheitcq 2011-09-15
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 icemornings 的回复:]
摘自K&R《C程序设计语言》:
点号,用语分隔字段宽度和精度
表示精度的数。对于字符串,它指定打印的字符的最大个数;对于e、E或f转换,它指
定打印的小数点后的数字位数;对于g或G转换,它指定打印的有效数字位数;对于整
型数,它指定打印的数字位数(必要时可填充位0以达到要求的宽度)。
-------------------
[/Quote]

终于找到正确解释了
l369294289 2011-08-13
  • 打赏
  • 举报
回复
个人觉得小数点能够区分%2x和%.2x没有小数点就不好区分。
%2x表示输出数据宽度为2,%.2x表示小数点后保留2位有效数字。
icemornings 2011-08-13
  • 打赏
  • 举报
回复
printf
语法:
#include <stdio.h>
int printf( const char *format, ... );

printf()函数根据format(格式)给出的格式打印输出到STDOUT(标准输出)和其它参数中.

字符串format(格式)由两类项目组成 - 显示到屏幕上的字符和定义printf()显示的其它参数. 基本上, 你可以指定一个包含文本在内的format(格式)字符串,也可以是映射到printf()其它参数的"特殊"字符. 例如本代码

char name[20] = "Bob";
int age = 21;
printf( "Hello %s, you are %d years old\n", name, age );

显示下列输出:

Hello Bob, you are 21 years old

%s 表示, "在这里插入首个参数,一个字符串." %d 表示第二个参数(一个整数)应该放置在那里. 不同的"%-codes"表示不同的变量类型, 也可以限制变量的长度.

Code 格式
%c 字符
%d 带符号整数
%i 带符号整数
%e 科学计数法, 使用小写"e"
%E 科学计数法, 使用大写"E"
%f 浮点数
%g 使用%e或%f中较短的一个
%G 使用%E或%f中较短的一个
%o 八进制
%s 一串字符
%u 无符号整数
%x 无符号十六进制数, 用小写字母
%X 无符号十六进制数, 用大写字母
%p 一个指针
%n 参数应该是一个指向一个整数的指针
指向的是字符数放置的位置

%% 一个'%'符号

一个位于一个%和格式化命令间的整数担当着一个最小字段宽度说明符,并且加上足够多的空格或0使输出足够长. 如果你想填充0,在最小字段宽度说明符前放置0. 你可以使用一个精度修饰符,它可以根据使用的格式代码而有不同的含义.

用%e, %E和 %f,精度修饰符让你指定想要的小数位数. 例如,

%12.6f

将会至少显示12位数字,并带有6位小数的浮点数.

用%g和 %G, 精度修饰符决定显示的有效数的位数最大值.
用%s,精度修饰符简单的表示一个最大的最大长度, 以补充句点前的最小字段长度.
所有的printf()的输出都是右对齐的,除非你在%符号后放置了负号. 例如,

%-12.4f

将会显示12位字符,4位小数位的浮点数并且左对齐. 你可以修改带字母l和h%d, %i, %o, %u和 %x 等类型说明符指定长型和短型数据类型 (例如 %hd 表示一个短整数). %e, %f和 %g 类型说明符,可以在它们前面放置l指出跟随的是一个double. %g, %f和 %e 类型说明符可以置于字符'#'前保证出现小数点, 即使没有小数位. 带%x类型说明符的'#'字符的使用, 表示显示十六进制数时应该带'0x'前缀. 带%o类型说明符的'#'字符的使用, 表示显示八进制数时应该带一个'0'前缀.

你可以在输出字符串中包含 连续的Escape序列.

printf()的返回值是打印的字符数,如果发生错误则返回一个负值.
紫色动力 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 icemornings 的回复:]

摘自K&R《C程序设计语言》:
点号,用语分隔字段宽度和精度
表示精度的数。对于字符串,它指定打印的字符的最大个数;对于e、E或f转换,它指
定打印的小数点后的数字位数;对于g或G转换,它指定打印的有效数字位数;对于整
型数,它指定打印的数字位数(必要时可填充位0以达到要求的宽度)。
-------------------
[/Quote]
谢谢啦,终于得到正确答案啦,呵呵
jernymy 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 purplepower 的回复:]
RT,我知道格式字符串的“%x”的意思是以无符号十六进制表示的整数,“2”的意思是输出两位。小数点的意思我就不懂了,请各位指点,谢谢,呵呵!
[/Quote]

参考百度百科的
printf
icemornings 2011-08-13
  • 打赏
  • 举报
回复
摘自K&R《C程序设计语言》:
点号,用语分隔字段宽度和精度
表示精度的数。对于字符串,它指定打印的字符的最大个数;对于e、E或f转换,它指
定打印的小数点后的数字位数;对于g或G转换,它指定打印的有效数字位数;对于整
型数,它指定打印的数字位数(必要时可填充位0以达到要求的宽度)。
-------------------

至善者善之敌 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 w_min 的回复:]
引用 2 楼 l369294289 的回复:
个人觉得小数点能够区分%2x和%.2x没有小数点就不好区分。
%2x表示输出数据宽度为2,%.2x表示小数点后保留2位有效数字。

正解
[/Quote]

++1
紫色动力 2011-08-13
  • 打赏
  • 举报
回复
程序是这样的:
#include<cstdio>
#include<iostream>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, int len)
{
int i;
for(i = 0; i < len; i++)
printf("%.2x", start[i]);
printf("\n");
}

void show_int(int x)
{
show_bytes((byte_pointer) &x, sizeof(int));
}

int main(void)
{

for(int i = 0; i != 19; ++i)
show_int(i);

return 0;
}

如果show_bytes中的printf中的格式字符串带小数点输出是:
00000000
01000000
02000000
.
.
.
12000000
如果不带小数点输出是:
0 0 0 0
1 0 0 0
2 0 0 0
.
.
.
12 0 0 0
从输出来看,感觉带小数点的输出会用“0”补齐,不带的就不会。

这怎么解释啊?
w_min 2011-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 l369294289 的回复:]
个人觉得小数点能够区分%2x和%.2x没有小数点就不好区分。
%2x表示输出数据宽度为2,%.2x表示小数点后保留2位有效数字。
[/Quote]
正解

70,007

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧