在C中将字符从一个数组连接到另一个数组

时间:2015-11-10 16:52:34

标签: c++ arrays char

我有一个包含26000行或记录的文本文件。 每条记录包含128个字节的十六进制数据。

我需要一次拔出4条记录,将其放入另一个数据结构并将其发送到套接字

以下是代码段

std::string array[26000];
char* char_ptr = NULL;
char data[512];

    for(int index = 0; index <  26000; index +=  4)
    {
                    // copy data
                    char_ptr = &(array[index]);
                    memcpy(&data, char_ptr, sizeof(data));

                    // send data on socket
    }

这只会给字符串数组中的每4个128byte记录。如何从字符串数组中获取4条记录或512字节数据并将其复制到char数据[]变量

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

首先,std::string与字节数组不同。

其次,构建这四个记录块的最简单方法可能是内循环。

    for(int index = 0; index <  26000; index +=  4)
    {
                    // copy data
                    for (int j=0; j<4; j++) {
                        assert(array[index+j].size() == 128);
                        memcpy((data)+(128*j), array[index+j]+data(), 128);
                    }

                    // send data on socket
    }

最后,正如其他答案所指出的那样,使用C风格的数组容易出错;最好在以后使用std::string或其他STL类型,就像实际在套接字上发送数据一样。

答案 1 :(得分:0)

您有26,000个std::string个对象,每个对象都有自己的内部数据,不保证内部缓冲区从一个对象连续到另一个对象。您的解决方案是修改循环对象,以便在填充data数组时单独使用每个对象。

答案 2 :(得分:0)

我建议您避免混用C和C ++代码。以下是如何做到的:

#include <numeric>
#include <string>

    std::string array[26000];
    const int add = 4;
    for (int i = 0; i < 26000; i += add)
    {
        std::string data;
        data = std::accumulate(array + i, array + i + add, data);

        // send data on socket
    }

我甚至在std :: vector上替换了第一个26000个元素数组,并在size()方法调用上替换了常量26000。使用C风格的数组很容易出错。

答案 3 :(得分:0)

你的循环计数变量正在增加4,但你只抓取一条记录。我认为更好的方法是让字符串对象为你处理内存分配,然后从结果字符串中抓取字符并将其发送出来。

for(int i = 0; i <  26000; i +=  4)
{
    string four_recs = array[i] + array[i+1] + array[i+2] + array[i+3];

    // Extract characters
    char *byte_data = new char [four_recs.length()];
    for (int j = 0; j < four_recs.length()]; j++)
        byte_data[j] = four_recs[j];


    // Send it out
}