2016-02-19 149 views
-2

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

我的应用程序:

  • 收集参数文件中插入和提取数据库的一些信息。 (此参数是用来确定的分离器和一些选项CSV出的文件或日志文件)
  • 使用批量插入创建的.fmt文件

后出现的问题。在创建.fmt文件之前,应用程序会翻译“代码页850”中的分隔符。这不是我创造这个部分,但它在生产中工作正常。我们使用分隔符'¤',作为回报,这个函数使用char'Ì'而不是'¤'。

我加深了我的研究,我发现:

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

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

如何自然皈依是干什么的?用ASCII表,不是? 这个结果如何可以有所不同?

这个问题发生在一个月前,但以前工作正常。我们更改语言& Region和某些Windows注册表等信息。

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

+1

据我所知,存在没有负指数的符号表。 – Lundin

+0

如果你对每个文件写了一个hexdump,它们是否显示为相同的字符?根据语言环境,您的应用程序可能会有所不同。确保两个系统上的语言环境相同以获得相同的结果。 –

回答

1

将-49转换为无符号的十六进制表示形式并打印整个单词。请注意,如果平台拾取的实际字符值(单个字节)不同,则printf使用%c,则输出不同。例如大端和低端。我想你会明白为什么这两个平台打印不同的字符。

0

自然转换如何进行?

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

int-49int字符常数'X'传递给printf(),格式说明"%c"期望一个int。到现在为止还挺好。 printf()取得该值并将其转换为unsigned char。因此,-49将打印与代码256-49或207相同的代码。

使用ASCII表,不是?这个结果如何可以有所不同?

ASCII只定义代码0 - 127字符代码207将打印不同的东西,依赖于平台和设置如何处理代码128 - 255

...我们改变像语言的一些信息&地区......这会对我的问题产生影响吗?

哦是的。