0

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

char str[12]="";

int a;
int b;
int c;

int x;
int y;
int z;


a=5;
b=7;
c=12;

我知道一个 int 是 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。

4

4 回答 4

4

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

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

然后你可以使用例如

istr[0] = a;
istr[1] = b;
istr[2] = c;

x = istr[0];
y = istr[1];
z = istr[2];
于 2013-10-03T07:56:32.077 回答
1

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

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

// Do work on nums here...

reinterpret_cast方法是未定义的行为。

于 2013-10-03T08:40:06.667 回答
1

这个问题没有很好地提出,所以你得到了不同的答案,这可能会也可能不会解决你的问题。在我的解释中,这就是你需要的:

int i1, 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 位是相当安全的,但这样更安全,严格来说更正确。

于 2013-10-03T09:03:29.237 回答
0

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

for (int i = 0; i < sizeof(int); ++i) {
  str[i] = (void *)(&x)[i];
}

这会将 x 的 4 个字节一一复制到 str 中。(void )(&x) 将 x 转换为 char数组(或 void*,同样的东西),并且 [i] 访问数组的第 i_th 字节

然后以相同的方式访问 str 的元素。对 y 和 z 做同样​​的事情,不要忘记偏移量

于 2013-10-03T07:57:06.487 回答