【问题标题】:C++ - Inserting and Extracting Characters from an Integer ArrayC++ - 从整数数组中插入和提取字符
【发布时间】:2023-03-03 16:00:02
【问题描述】:

例如:

char mem[100000];

int reg[8];

mem[36] = 'p';         // add char p to our 36th index of our char array

reg[3] = (int)mem[36]; // store value of mem[36] into reg[3]
  • 现在我想打印该 int 数组索引 3 处的 char 值。

  • 到目前为止,我的思考过程引导我编写如下代码:

    char *c = (char*)reg[3];

    cout

但是当我尝试打印出来时,我仍然得到奇怪的值和字符。

据我了解,一个整数等于 4 个字符。因为一个字符在技术上是一个字节,而一个整数是 4 个字节。

所以我将一个字符作为 4 个字节存储到我的整数数组中,但是当我将其拉出时,有垃圾数据,因为我插入的字符只有一个字节,而索引的大小为 4 个字节。

【问题讨论】:

  • 你试过简单地做cout << reg[3] << endl;吗?
  • 是的,而不是打印字符“p”,而是打印一个长整数。这是由于我的索引中有垃圾数据,因为从技术上讲,一个字符只有 1 个字节,而一个整数是 4 个字节。

标签: c++ arrays pointers char int


【解决方案1】:

我看不出你有什么问题。您将 char 存储到 int var 中。您想将其打印回来 - 只需将值转换为 char 并打印它

#include <iostream>

int main()
{
    char mem[100];

    int reg[8];

    mem[36] = 'p';         // add char p to our 36th index of our char array

    // store value of mem[36] into reg[3]
    reg[3] = mem[36]; 

    // store value of mem[36] into reg[4] with cast
    reg[4] = static_cast<int>(mem[36]); 

    std::cout << static_cast<char>(reg[3]) << '\n';
    std::cout << static_cast<char>(reg[4]) << '\n';

}

/****************
 * Output
$ ./test
p
p
*/

【讨论】:

    【解决方案2】:

    你试过了吗:

    char mem[100000];
    int reg[8];
    mem[36] = 'p';         // add char p to our 36th index of our char array
    reg[3] = (int)mem[36]; // store value of mem[36] into reg[3]
    char txt[16];
    sprintf(txt, "%c", reg[3]);  // assigns the value as a char to txt array
    cout<<txt<<endl;
    

    这会打印出值'p'

    【讨论】:

      【解决方案3】:

      你不应该在这里使用指针;与chars 合作就足够了:

      char c = reg[3];
      cout << c << endl;
      

      但是请注意,尝试将 int 填充到 char 变量中时,您可能会丢失信息。

      【讨论】:

      • 您的解决方案是正确的。但我的问题是我没有直接向我的数组添加一个字符。我试图展示一个简化的例子。实际上,我正在将一个单独的 char 数组中的字符添加到这个 int 数组中。所以我收到一条错误消息,上面写着“char* 不能分配给 int”。因此,使其工作的唯一方法是将其强制转换为整数,从而在数组中赋予它不同的表示形式。而且由于这个演员阵容,我在将角色从数组中抢回时遇到了麻烦。
      • 向我们展示您如何从另一个 char 数组中添加字符。您可能正在尝试将整个数组分配给 int 数组中的单个索引。
      • 如果您使用chars 而不是解决方案中给出的char *s,您的“char* 无法分配给 int”问题将得到解决。即使使用您的附加代码,使用 char 似乎也可以解决您的问题。这里有什么我可能误解的地方吗?
      • 我的错误中的“char*”是指我的 char 数组。我从我的 char 数组 (char*) 中取出一个元素并将其插入到我的 int 数组中。这就是为什么我得到“char* 不能分配给 int”错误的原因。因此,我可以将字符数组中的某些内容插入整数数组的唯一方法是将值转换为整数。
      • (续...)现在,如果我想打印出我刚刚插入整数数组的内容,它会给我一个奇怪的表示。那是因为我将一个 1 字节字符存储到一个 4 字节长的索引中(因为它是一个整数数组)。所以我只是不知道如何打印出我刚刚插入的字符表示。
      猜你喜欢
      • 2016-11-24
      • 2018-09-10
      • 1970-01-01
      • 2019-03-09
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多