我最近在C应用程序中遇到了一些问题。此应用程序在生产中工作正常,但在本地测试中失败。
我的申请:
还有问题。在创建.fmt文件之前,应用程序在“代码页850”中翻译分隔符。创造这部分不是我,但它在生产中运作良好。我们使用分隔符'¤'作为回报,这个函数我有char'Ì'而不是'¤'。
我加深了研究,我注意到了:
printf("\n%c", -49); --> '¤' on my PC (Windows 7)
printf("\n%c", -49); --> 'Ì' on VM (Windows 2008 R2)
自然转换是如何进行的?使用ASCII表,没有? 这个结果有何不同?
这个问题发生在一个月前,但以前工作正常。我们更改了一些信息,如Language&区域和一些Windows注册表。
这会对我的问题产生影响吗?
答案 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
-49
或int
字符常量'X'
传递给printf()
时,格式说明符"%c"
需要int
1}}。到现在为止还挺好。 printf()
获取该值并将其转换为unsigned char
。所以-49打印的代码与代码256-49或207相同。
使用ASCII表,没有?这个结果有何不同?
ASCII仅定义代码0 - 127.字符代码207将打印不同的内容,具体取决于该平台和设置如何处理代码128 - 255.
...我们更改了一些信息,例如Language&地区......这会对我的问题产生影响吗?
哦,是的。