【问题标题】:Symbol id instead of the actual symbol符号 id 而不是实际的符号
【发布时间】:2015-02-07 05:58:09
【问题描述】:
vector<vector<int>> mapVector(maxX, vector<int>(maxY));
char* mapBuffer = new char[mapString.size() + 1];
...
mapVector[i][j] = mapBuffer[y];
...

mapBuffer[i][j] 包含“#”符号,但在“mapVector[i][j] = mapBuffer[y]”之后 mapVector[i][j] 包含数字“35”。为什么它传递的是 id 而不是符号?

【问题讨论】:

  • 您没有详细说明您是如何查看数据的,但是 ASCII 字符号 35 是“#”,如果您要求将其视为一个字符,您将看到“#”将其视为数值,您将看到 35。
  • 好吧,我该怎么做?
  • “好吧,我该怎么做?” See here for example please
  • @НикитаПогуца 告诉我们你是怎么做到的
  • 为什么要将字符保留在 int 向量中?

标签: c++ symbols


【解决方案1】:

下面是如何使用 printf 查看数据:

#include <stdio.h>
int main (int argc, char **argv){
    char test='#';
    printf("test %c %d\n", test,test);
    return 0;

}

%c 呈现为 char %d 呈现为 int

(以上是 C 语言,但 C 的那部分将由 C++ 编译器编译)

因此,在您的代码中,如果您将向量更改为 char 向量,您将不会遇到问题:

 vector<vector<char>> mapVector(maxX, vector<char>(maxY));
 char* mapBuffer = new char[mapString.size() + 1];
 ...
 mapVector[i][j] = mapBuffer[y];
 ...

【讨论】:

  • 我不能 100% 确定它在没有演员表的情况下适用于大端架构。但是我在将它发布到一个小端 x86 盒子之前编译并运行了它。
  • 刚刚在运行 OSX 的 PPC Mac 上构建并运行它仍然可以工作,即大端。
  • 为什么不使用 C++,OP 正在使用哪个?
  • C++ 是 C 的超集,我试图展示一些非常简单的东西。 OP 没有显示 mapVector 的类型只是它有两个下标,我不想以剪切和粘贴的方式明确修复他们的代码,我只想向他们展示他们所看到的并给他们一个线索如何解决它。
  • 第一:mapVector是vector(即C++ stl),第二:C++不是C的超集,它是不同的语言(恰好与C兼容),第三:问题标记为C++
猜你喜欢
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多