2017-10-07 55 views
2

插入和提取特征例如:C++ - 从一个整数阵列

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 * C =(字符*)REG [3];

    cout < < * c < < endl;

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

从我的理解,一个整数等于4个字符。由于字符在技术上是一个字节,整数是4个字节。

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

+0

你试过简单地做'的cout << REG [3] << ENDL;'? – frslm

+0

Yes和,代替字符“P”被打印,一个长整型被打印。这是由于我的索引中有垃圾数据,因为一个字符在技术上只有1个字节,而一个整数是4个字节。 – kabuzashi

回答

0

你不应该在这里用指针来;它足以与char s到工作:

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

注意,但是,试图在int塞进一个char变量时,你可能会失去信息。

+0

您的解决方案是正确的。但我的问题是我没有直接给我的数组添加一个字符。我试图展示一个简单的例子。实际上,我正在将一个字符从一个单独的char数组添加到这个int数组中。所以我得到一个错误,说“char *不能被分配给int。”因此,使其工作的唯一方法是将其转换为一个整数,从而使其在数组中具有不同的表示形式。而且因为这个角色,我有麻烦把角色从阵列中拉出来。 – kabuzashi

+0

告诉我们如何你从其他'char'阵列添加字符。您可能试图将整个数组分配给int数组中的单个索引。 – frslm

+0

你“的char *不能分配给INT”如果你使用'char's代替'字符*'S作为溶液中的特定问题就解决了。即使使用额外的代码,使用'char'似乎也能解决您的问题。有什么我可能在这里误解? – frslm

1

你有没有尝试过这样的:

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值

0

我看不出你有什么问题。您将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 
*/