C++ 高效获取数据的算法

C++ 高效获取数据的算法,c++,algorithm,C++,Algorithm,我有一个我创建的二进制文件。在它里面,数据是以二进制形式存储的,但我将以人类可读的形式显示它,比如 [someOtherData]opalgo$apollo$[someOtherData] ^ ^ ^ file pointer 我想把数据“opalgo”保存在temp_S中,它被声明为string 获取驻留在二进制文件中的数据 首先,我通过递增文件指针来计算它的长度,每次都与“

我有一个我创建的二进制文件。在它里面,数据是以二进制形式存储的,但我将以人类可读的形式显示它,比如

[someOtherData]opalgo$apollo$[someOtherData]
               ^
               ^
               ^
             file pointer
我想把数据“opalgo”保存在temp_S中,它被声明为string

获取驻留在二进制文件中的数据

  • 首先,我通过递增文件指针来计算它的长度,每次都与“$”进行比较
  • 其次,我返回数据长度,对于这个例子| opalgo |=6
  • 第三,每次,我取一个字符并将其与字符串连接起来,字符串初始化为“”。也就是说,string+=temp_Char
当然,在我看来,上述算法是一团糟的。我找不到从二进制文件中提取数据的有效方法。现在,我有点惭愧。你能给我一个更好的方法吗


编辑:我不知道文件大小,但如你所知,我可以使用seekg和tellg进行计算。

不需要分三步进行计算,而是可以在第一步中完成:在查找终止“$”时,只需将字符放入
temp\u
。不需要计算长度

std::ifstream input(...);

std::string temp_S;
char c;
while (input.get(c))
{
    if (c == '$')
        break;  // Found terminator, read no more into string
    temp_S += c;
}

不需要分三步来完成,而是可以在第一步中完成:在查找终止字符“$”时,只需将字符放入
temp\u S
。不需要计算长度

std::ifstream input(...);

std::string temp_S;
char c;
while (input.get(c))
{
    if (c == '$')
        break;  // Found terminator, read no more into string
    temp_S += c;
}

你知道这个文件有多大吗?或者从几KB到几GB?你知道这个文件有多大吗?或者它可能是从几KB到几GB?我计算了长度,因为我确保我获取了所有数据。此外,在某些情况下,我直接使用带有length的ios::read()函数。我计算了length,因为我确保获取了所有数据。此外,在某些情况下,我直接使用具有长度的ios::read()函数。