【问题标题】:How to convert an array of ASCII codes to int C++如何将 ASCII 代码数组转换为 int C++
【发布时间】:2015-10-10 22:53:39
【问题描述】:

首先,我想从纯文本中阅读,我阅读了数百个关于它的网页,但我无法做到。我想读取文件的每个字节,每两个字节是我要存储的数字。

我想读:10 20。

我得到:1的ASCII码,0的ASCII码,空格的ASCII码等等。

我尝试了几件事,例如 stream.get 或 stream.read,尝试使用 atoi 进行转换,但我无法连接两个数字,我尝试了 sprintf,但都失败了。

【问题讨论】:

  • 将 ascii(即文本)转换为 ints 已经使用 scanf 成功完成了 45 年左右。 scanf 可以安全地与 C++ 一起使用。或者,您可以使用仅使用了 30 年左右的花哨的 C++ 流。也许你读入了一个 char 变量?尝试做int i1, i2; cin >> i1 >> i2;
  • 为什么不像int x,y; cin >> x >> y;这样简单呢?完全不清楚您的问题到底是什么,请改进您的问题。
  • 是的,包括更好的输入和预期输出的措辞。最好展示一个示例程序并转录一个运行它的示例会话。
  • 向我们展示您认为应该有效但无效的最简单代码。
  • std::istringstream iss(text); for (i = 0; i > std::noskipws >> numbers[i]; if (numbers[i] == ' ') { printf("SPACE"); } else if(numbers[i] == '\n') { printf("ENTER"); } else { } printf("%u", numbers[i]); }

标签: c++ file text ascii


【解决方案1】:

ASCII码数组:

 char ASCII[] = "10 20";

转换为整数变量:

 std::istringstream iss(ASCII);

 int x,y;

 iss >> x >> y;

完成。

这是工作示例:http://ideone.com/y8ZRGs

【讨论】:

  • 看起来很简单,但我有两个问题。我的数组是动态的,即使我想尝试这段代码:错误 1 ​​错误 C2079: 'iss' uses undefined class 'std::basic_istringstream,std::allocator >' 错误 2 错误 C2440:'正在初始化':无法从 'char [6]' 转换为 'int' 我的代码:char stuff[] = "11 12"; std::istringstream iss(stuff);
  • @Asd 请改进您的问题,以获得更好的答案。如果没有更多上下文,我应该如何知道您的真正问题是什么?无论如何,我的回答很笼统,应该适用于您的 uee 案例。尝试; std::istringstream iss(std::string(stuff)); 并使用#include <sstream>#include <string> 添加所需的标题。
  • 代码:int x, y;字符 ASCII[] = "10 20"; std::istringstream iss(std::string(ASCII)); ISS >> x >> y;错误:错误 1 ​​错误 C2296:'>>':非法,左操作数的类型为 'std::istringstream (__cdecl *)(std::string)' 4 IntelliSense:表达式必须具有整数或无范围枚举类型
  • @Asd 为我工作,为我的答案添加链接。您的问题似乎来自其他地方。
  • 谢谢,这是我的错,我没有包含 istream。现在我让它工作并实施到我的案例中,但我现在有一个大问题。我想检测空格并输入。如果我这样做,我会失去这个,我会失去结构。我想在空格之间存储值,如果出现输入,我想将下一行存储在不同的位置。 ://
【解决方案2】:

如果您想使用自己的代码执行此操作,您只需要做两件事。

首先,您需要将一个数字的 ASCII 码转换为它所代表的数字。这就像减去'0' 一样简单。

其次,你需要将两位数的每一位数字的数值转换为代表的数字。这很简单——如果T 是十位,U 是个位,那么它就是10T + U

所以,例如:

int twoDigitNumber (char tens, char units)
{
    return 10 * (tens - '0') + (units - '0');
}

【讨论】:

    猜你喜欢
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多