究竟是什么'%Id'意思? (大写I,小写d)

时间:2016-07-26 23:18:19

标签: c glibc

我询问的是%Id,而不是%ld

任何人都可以向我解释一下"我"确切地说:

  

I对于十进制整数转换(idu),输出使用   区域设置的替代输出数字(如果有)。对于             例如,由于glibc 2.2.3,这将在波斯语("fa_IR")语言环境中给出阿拉伯语 - 印度语数字。

举个例子:

printf("%Id",1);

换句话说,%d%Id之间有什么区别?

任何人都可以用简单的单词和简单的例子解释它的区别吗?

1 个答案:

答案 0 :(得分:3)

printf格式选项I是一个glibC扩展,用于选择数字的区域设置表示。它不是由C标准定义的,不应在便携式代码中使用。

如果C库正确选择并支持语言环境,则调用printf("%Id", 1);可能会生成一个字符串,编码Unicode代码点U + 0661 ١,它是阿拉伯语中数字1的表示形式。

请参阅http://www.fileformat.info/info/unicode/char/0661/index.htm

相反,printf("%d", 1);始终会打印1,这是西方第一的代表。

更令人困惑的是,1被称为阿拉伯数字,而罗马数字 I ...与...无关I中的%Id