-1

我正在尝试使用 turbo C++ 编写存储在二进制文件中的数据。但它向我显示了一个错误

could not find an match for ostream::write(long *, unsigned int)

我想将一个 4 字节的long数据写入该文件。当我尝试使用 char 指针写入数据时。它运行成功。但我想存储大值,例如。2454545454 只能存入其中long

我不知道如何将 1 字节转换为位。我有 1 个字节的数据作为一个字符。此外,我想做的是将 4 个字符转换为 long 并将数据存储到其中。另一方面,我想扭转这一点,以检索我写了多少字节的数据。

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(lmem,sizeof(long));// error occurs here
delete lmem;

我正在实施隐写术,并且我已成功将 txt 文件存储到图像中,但现在尝试检索该文件数据。

编辑:

我正在使用涡轮编译器。

4

4 回答 4

4

将其转换为char*

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(reinterpret_cast<char*>(lmem),sizeof(long));
delete lmem;

甚至更好(因为堆栈上的分配更快且更不容易出错)

long lmem = Tsize;
fo.write(reinterpret_cast<char*>(&lmem),sizeof(long));

如果Tsize是可寻址的并且很长,您可以这样做:

fo.write(reinterpret_cast<char*>(&Tsize),sizeof(long));
于 2010-03-22T13:50:01.003 回答
0

我相信 write 需要一个 char* ,而不是 long*

ostream& write ( const char* s , streamsize n );

http://www.cplusplus.com/reference/iostream/ostream/write/

于 2010-03-22T13:51:20.090 回答
0

1)

const long L = Tsize;
fo.write(reinterpret_cast<const char*>(&L),sizeof(L));
于 2010-03-22T13:52:45.810 回答
0

这里有几个问题。

首先,您不需要创建一个全新long的来存储 Tsize。您可以创建一个指向您已经拥有的 Tsize 的指针。

其次,write调用采用字节流。您需要做的是将指针转换为 char*。

像这样:

fo.write( static_cast<char*>(&Tsize), sizeof(Tsize) );

第三,像这样长篇大论是非常低效的。如果您有大量要写入的 long 值,请使用单个 write 调用来获取所有这些值,例如:

fo.write( static_cast<char*>(array), sizeof(*array) * array_count );

我很确定 static_cast 在这里适用于指针,但如果它没有,那么将代码更改为使用reinterpret_cast.

于 2010-03-22T13:54:16.463 回答