将int转换为char

时间:2016-02-19 14:07:08

标签: c ascii

我最近在C应用程序中遇到了一些问题。此应用程序在生产中工作正常,但在本地测试中失败。

我的申请:

  • 收集文件中的参数以便插入并提取数据库中的一些信息。 (此参数用于确定csv out文件或日志文件中的分隔符和某些选项)
  • 创建.fmt文件后使用批量插入

还有问题。在创建.fmt文件之前,应用程序在“代码页850”中翻译分隔符。创造这部分不是我,但它在生产中运作良好。我们使用分隔符'¤'作为回报​​,这个函数我有char'Ì'而不是'¤'。

我加深了研究,我注意到了:

printf("\n%c", -49);  --> '¤' on my PC (Windows 7)

printf("\n%c", -49);  --> 'Ì' on VM    (Windows 2008 R2)

自然转换是如何进行的?使用ASCII表,没有? 这个结果有何不同?

这个问题发生在一个月前,但以前工作正常。我们更改了一些信息,如Language&区域和一些Windows注册表。

这会对我的问题产生影响吗?

2 个答案:

答案 0 :(得分:1)

将-49转换为无符号十六进制表示并打印整个单词。请注意,如果平台拾取的实际字符值(单个字节)不同,则printf使用addons: artifacts: true s3_region: "us-west-2" artifacts: paths: - $(git ls-files -o app/build/outputs | tr "\n" ":") ,则输出不同。例如big endian和low endian。我想你会明白为什么这两个平台会打印不同的字符。

答案 1 :(得分:0)

  

自然转换是如何进行的?

printf("%c%c", -49, 'X');

int -49int字符常量'X'传递给printf()时,格式说明符"%c"需要int 1}}。到现在为止还挺好。 printf()获取该值并将其转换为unsigned char。所以-49打印的代码与代码256-49或207相同。

  

使用ASCII表,没有?这个结果有何不同?

ASCII仅定义代码0 - 127.字符代码207将打印不同的内容,具体取决于该平台和设置如何处理代码128 - 255.

  

...我们更改了一些信息,例如Language&地区......这会对我的问题产生影响吗?

哦,是的。