【问题标题】:Microsoft Visual C++ 0x80 reading into char from ASCII fileMicrosoft Visual C++ 0x80 从 ASCII 文件读取字符
【发布时间】:2011-06-29 21:55:43
【问题描述】:

我正在尝试从文件中读取由十六进制值 0x80 表示的字符,然后在写入另一个文件时忽略该字符。但是,如果我用一个简单的命令检查这个字符,例如:

if(int(c1) == 0x80)
  str += "";

字符最终仍会写入字符串并最终写入我的文件。我做了一些研究,我认为这可能与有符号/无符号字符和 Microsoft Visual C++ 2008 使用有符号字符有关,将 0x80 置于边界之外。当我知道一个变量包含这个字符并且鼠标悬停在我的程序中插入断点时,它告诉我该字符的值为 0。我现在确定这意味着什么,但是当我开始将它用作测试时 c1 == 0 它仍然最终将字符写入文件。奇怪的是,它在 Notepad++ 中显示为块字符 0x80 而不是欧元符号(当它未被捕获时它如何显示在输入和输出文件中。知道发生了什么吗?

【问题讨论】:

    标签: visual-c++ character-encoding ascii hex


    【解决方案1】:

    正如您推测的那样,它可能是对数字进行符号扩展。这可能有效:

    if((int(c1) & 0xff)== 0x80)
      str += "";
    

    【讨论】:

    • 这行得通,但仅测试字符是否等于 -128 也是如此。它正在环绕。我是通过观察输入流发现的。
    • 当然,这样会更有效率。
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2015-12-08
    • 2010-11-22
    • 2013-03-01
    • 2021-06-11
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多