【问题标题】:Conversion of a char array to an int pointer将 char 数组转换为 int 指针
【发布时间】:2012-11-04 19:44:26
【问题描述】:

我有一个名为Message 的字符串对象,它被赋予一个字符串,例如:

Message = "Hello";

然后将每个字符存储在一个字符数组中:

void Load()
{
    Message.toUpperCase(); // Makes all the characters uppercase
    for (int T = 0; T < Message.length(); T++) 
    {
        Storage[T] = Message.charAt(T);
    }       
 }

这部分工作正常。

现在我想调用一个函数,该函数需要传递一个指向数组的整数指针,该数组映射出在 5*7 LED 矩阵上显示字符所需的位值。

通常我可以打电话给Display(H) (void Display(int Array[])),就可以了。但是,我想使用字符串数组,以便它可以自动完成。问题是,当通常使用 H 时,它被视为整数指针,并且效果很好。存储存储不是指针的字符,这会产生问题。

我尝试了各种转换它的方法,但似乎都失败了。这甚至可能吗?

这是我尝试过的:

char to int:
int w = int(Storage[L]);
int* ww = &w;

这编译得很好,但是输出全错了。所以我不太确定如何更进一步。

澄清一下,这是可行的:

int A[] = {0x1B, 0x15, 0xE, 0xE, 0x0, 0xE, 0xE, 0xE};

Display(A);

但这不是:

String[L] = A;
int w = int(Storage[L]);
int* ww = &w;

Display(ww);

我可能在做一些傻事,但我看不到。

【问题讨论】:

  • C和C++中的字符是ASCII值,所以字符'A'就是65的值,不能用作LED显示屏的位标志。您必须创建一个转换例程,该例程接受一个字符并将其转换为具有正确值的数组。最简单的方法是有一个转换表,因此您可以使用字符值对其进行索引并获取正确值的静态常量数组。
  • 为什么不把 char Storage[?] 替换成 int Storage[?] 呢?你的问题让我很困惑,我不知道你想做什么..
  • 在这种情况下charint 的大小是多少? Display() 函数是否使用其 ASCII 值显示每个字符?
  • int A[] = {0x1B, 0x15, 0xE, 0xE, 0x0, 0xE, 0xE, 0xE}; Display(A); 这里的预期输出是什么?

标签: c++ arduino


【解决方案1】:

int 和 char 的大小不同,一个 int (通常)是一个 char 大小的四倍,所以当你在你的数组中取一个特定 char 的指针值时,你也是把下面三个 char 复制到诠释。这可能就是您的输出混乱的原因。请尝试以下操作:

    int i = (Storage[idx])
    int * ptrI = &i;//now ptrI points to the single integer which has been copied.

如果你想指向多个整数,你需要定义一个整数数组(比你的 char 数组小四倍)——确保你的大小是正确的。除此之外,我无能为力,因为您的解释不清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2023-01-08
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2018-06-11
    相关资源
    最近更新 更多