Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将多个整数添加到字符数组中,然后将其拉出?_C++_C_Arrays_String_Char - Fatal编程技术网

C++ 如何将多个整数添加到字符数组中,然后将其拉出?

C++ 如何将多个整数添加到字符数组中,然后将其拉出?,c++,c,arrays,string,char,C++,C,Arrays,String,Char,我试图使用c将3个整数(字节大小为4)逐字节放入字符串中。然后我需要从字符数组中“提取”整数,以便对它们执行整数运算。我环顾四周,找不到任何解决办法。我认为这将需要某种类型的指针使用或移动,但我不知道如何编写它 char str[12]=""; int a; int b; int c; int x; int y; int z; a=5; b=7; c=12; 我知道整数是4个字节。我想让str char数组包含以下数据 str = |a1|a2|a3|a4|b1|b2|b3|b4|c1

我试图使用c将3个整数(字节大小为4)逐字节放入字符串中。然后我需要从字符数组中“提取”整数,以便对它们执行整数运算。我环顾四周,找不到任何解决办法。我认为这将需要某种类型的指针使用或移动,但我不知道如何编写它

char str[12]="";

int a;
int b;
int c;

int x;
int y;
int z;


a=5;
b=7;
c=12;
我知道整数是4个字节。我想让str char数组包含以下数据

str = |a1|a2|a3|a4|b1|b2|b3|b4|c1|c2|c3|c4|
*我不想这样。str=|“5”|“7”|“12”|

然后我需要从字符数组中“提取”整数

x=str[0-3];  //extracting a
y=str[4-7];  //extracting b
z=str[8-11]; //extracting c

在此之后,我应该能够写入x=y+z,x将等于19。

一种方法是将
str
视为
int
数组:

int* istr = reinterpret_cast<int*>(str)


一种方法是将
str
视为
int
数组:

int* istr = reinterpret_cast<int*>(str)

使用
(void*)
逐字节获取指向x的指针

for (int i = 0; i < sizeof(int); ++i) {
  str[i] = (void *)(&x)[i];
}
for(int i=0;i
这将把x的4个字节逐一复制到str中。(void)(&x)将x强制转换为字符数组(或void*,同样的内容),并且[i]访问数组的第i个字节

然后以相同的方式访问str的元素。 对y和z执行同样的操作,不要忘记偏移量

使用
(void*)
逐字节获取指向x的指针

for (int i = 0; i < sizeof(int); ++i) {
  str[i] = (void *)(&x)[i];
}
for(int i=0;i
这将把x的4个字节逐一复制到str中。(void)(&x)将x强制转换为字符数组(或void*,同样的内容),并且[i]访问数组的第i个字节

然后以相同的方式访问str的元素。
对y和z执行相同的操作,并且不要忘记偏移量

最简单的解决方案是使用
memcpy

int nums[sizeof str / sizeof(int)];
std::memcpy(nums, str, sizeof nums);

// Do work on nums here...

重新解释强制转换的方法是未定义的行为。

最简单的解决方案是使用
memcpy

int nums[sizeof str / sizeof(int)];
std::memcpy(nums, str, sizeof nums);

// Do work on nums here...

重新解释方法是未定义的行为。

这个问题没有被很好地提出,因此你得到了不同的答案,可能解决了问题,也可能没有解决问题。根据我的理解,以下是您需要的:

inti1、i2、i3;
char-arr[sizeof(i1)+sizeof(i2)+sizeof(i3)];
memcpy(arr,&i1,sizeof(i1));
memcpy(arr+sizeof(i1)和i2,sizeof(i2));
memcpy(arr+sizeof(i1)+sizeof(i2),&i3,sizeof(i3));

请注意,我故意使用sizeof(I)而不是仅仅使用“4”来显式表示。在您使用的任何环境中,整数都可以是32位的,这是相当安全的,但这更安全,严格来说更正确。

这个问题没有被很好地提出,因此您得到了不同的答案,这可能解决了您的问题,也可能解决不了您的问题。根据我的理解,以下是您需要的:

inti1、i2、i3;
char-arr[sizeof(i1)+sizeof(i2)+sizeof(i3)];
memcpy(arr,&i1,sizeof(i1));
memcpy(arr+sizeof(i1)和i2,sizeof(i2));
memcpy(arr+sizeof(i1)+sizeof(i2),&i3,sizeof(i3));

请注意,我故意使用sizeof(I)而不是仅仅使用“4”来显式表示。在您使用的任何环境中,整数都是32位是相当安全的,但这更安全,严格地说更正确。

您必须使用sprintf()等函数将整数转换为字符串。否则,不能将每个数字分配给不同的字节。然后按字节进行赋值,就像字符串中的字符一样。后一种方法是将起始索引(如str[0]、str[4]、str[8]的地址传递给atoi以获取转换,但您必须使用函数(如sprintf())将整数转换为字符串。否则,不能将每个数字分配给不同的字节。然后按字节进行赋值,就像字符串中的字符一样。后者将起始索引(如str[0]、str[4]、str[8]的地址传递给atoi,以获取转换完成y和z的工作?对于(inti=5;i