四个1byte char到One 4byte int?

时间:2016-11-17 11:53:48

标签: c++ c char int type-conversion

我有一个1000字节的char数组。我想将它转换为int数组,这样char数组的四个元素(每个字节一个)等于int数组的一个元素(每个四个字节)。

e.g.:
char_array[0] = '0'
char_array[1] = '9'
char_array[2] = '2'
char_array[3] = '8'

it should be converted to
int_array[0] = 928 or 0928.

我该怎么做?

5 个答案:

答案 0 :(得分:1)

对于数组中的每个字符,将数字添加到我们正在构建的值中。 (我们事先乘以10来调整数字)。

每4位数字,添加到整数数组并重置值。

int value = 0;
for (i = 0; i < 1000; i++){
   value *= 10;
   value += char_array[i] - '0'
   if(i % 4 == 3){
      int_array[i/4] = value;
      value = 0;
   }
}

请注意,如果char_array包含数字0-9以外的字符,则无法执行此操作,但这样可以轻松添加。

答案 1 :(得分:0)

为什么不使用sscanf将数组转换为int值。如果要将char数组的4个字节转换为一个int,则只需将数组拆分为4个字节的块并逐个扫描,如下所示:

#include <stdio.h>
#include <string.h>

int main()
{
    char char_array[8] = {'0', '9', '2', '8', '1', '2', '3', '4'};
    int array_size = sizeof(char_array) / sizeof(char_array[0]);

    int sizeof_int = sizeof(int);
    int int_array[array_size / sizeof_int];

    char buf[sizeof_int + 1];
    for (int i = 0; i < array_size; i += sizeof_int)
    {
        memcpy(buf, char_array + i, sizeof_int);
        buf[sizeof_int] = '\0';
        int val = 0;
        if (sscanf(buf, "%d", &val) == -1)
          return -1; // return in case scanf returns an error
        int_array[i / sizeof_int] = val;
    }

    for (int i = 0; i < array_size / sizeof_int; i++)
      printf("%d\n", int_array[i]);
}

这将产生

928
1234

作为输出。

哦顺便说一下,既然你正在使用C-Style数组,我想你也想要一个C解决方案。否则我建议使用vector而不是数组。

答案 2 :(得分:0)

您可以使用strncpy仅在临时字符数组中复制4个字符,然后按atoi将其转换为整数。

char tmp[5];
tmp[4] = '\0';
for (int i=0; i<250; i++)
  {
    strncpy (tmp, &char_array[i*4], 4);
    int_array[i] = atoi (tmp);
  }

答案 3 :(得分:-1)

请尝试以下代码:

#include<iostream>
#include<cstring>

using namespace std;

#define CHAR_ARRAY_SIZE 8

int main()
{
    char charArray[CHAR_ARRAY_SIZE] = {'1', '2', '3', '4', '5', '6', '7', '8'};

    int intArray[2];
    for(int i = 0; i < CHAR_ARRAY_SIZE/4; i++) {
        char ch1 = (charArray[4*i+0] - '0');
        char ch2 = (charArray[4*i+1] - '0');
        char ch3 = (charArray[4*i+2] - '0');
        char ch4 = (charArray[4*i+3] - '0');

        intArray[i] = ch1*1000 + ch2*100 + ch3*10 + ch4;
    }
    cout << "intArray[0] : " << intArray[0] << endl;
    cout << "intArray[1] : " << intArray[1] << endl;

    return 0;
}

答案 4 :(得分:-3)

如果你的所有char组件在数组中是连续的,那么简单地将第一个地址转换为int *就像这样:

char_array[0] = '0'
char_array[1] = '9'
char_array[2] = '2'
char_array[3] = '8'

int * char_array_to_int = (int *)char_array;

然后* char_array_to_int包含您想要的值。

否则,您可以使用位移来用您想要的4个字节填充int。

修改

抱歉,我错过了char数组的引号。

然后是的,您需要从注释中指出的数字的ascii表示更改为数字本身。