gpt4 book ai didi

C++ pwrite(), pread() 数据到文本文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:33 28 4
gpt4 key购买 nike

我必须将 pwrite() 字符写入文本文件,每个字符代表 1 个字节。另外,我需要将整数写入文本文件,因此 12 也必须是一个字节,而不是 2 个字节(即使是两个字符)。

我正在为字符和整数使用 char *pointer,但我被卡住了,因为文本填充为整数打印了困惑的值(@、颠倒的?等),就像我 pwrite( ) 指针[0] = 105; 105 翻译 text.txt 文件中的“i”(并且 pread() 读作“i”)不知何故 105 在翻译中丢失了。

关于如何正确地 pwrite()/pread() 有什么想法吗?

ofstream file; file.open("text.txt");
char *characters = new char;
characters[0] = 105;
cout << pwrite(3, characters, 1, 0);

此外,3 是文件,我猜 :-P 不知道如何实际找到。然后 text.txt 文件中有“i”(我假设是 ASCII 105)。那么当我 pread() 时,我怎么知道它最初是 'i' 还是 105?

最佳答案

将其分解成 block :

"I have to pwrite() characters to a text file with each character representing 1 byte"

根据定义,每个 ASCI character 一个字节,您没有提到需要编写可识别区域设置的多字节字符或 Unicode 派生字符,所以我认为您可能已经了解了这一点。

"Also, I need to write integers to the text file, so 12 has to be one byte also, not 2 bytes (even though two characters)"

您正在描述整数数据的二进制写入。但是,请记住,作为数字表示的“整数”可以大于仅由“一个字节”表示的数字。如果你想写一个可以用单个字节表示的整数,你的选择是:

  1. 对于签名数据,值的范围可以是 [-128,127]
  2. 对于无符号数据,值的范围可以是 [0, 255]

这些是单个八位字节中整数值的限制。

"I am using char *pointer for the characters and integers, but I am getting stuck since the text fill prints jumbled values for the integers (@'s, upside-down ?'s, etc.)"

我们之前介绍过的字符的 char 指针,可能没问题。整数不会。根据您的描述,您生成的文件将不是字面意义上的“文本”文件。它将包含字符数据(您的字符缓冲区)和二进制数据(您的整数)。请记住,单个字节中值为 0x01 的整数就是第一位设置的单个八位字节。表示 ASCI 字符 '1' 的字节的值为 0x31(请参阅任何 ASCI chart ),而 EBCDIC 的值为 0xF1(不要询问)。使用您的示例,**您不能将值 12 写入单个字节并使其成为文件中可显示的“文本”(字符)数据。单字节整数值 12 将在您的文件中表示为单字节值 0x0C。试图将其视为“文本”是行不通的;它不是可打印的 ASCI。事实上,0x0C 的 ASCI 值实际上是一个换页控制字符。

底线,如果您不知道 ASCI 字符和整数字节之间的区别,请解释如何 pwrite()工作不会有什么好处,只会让你更加困惑。

"Like when I pwrite() pointer[0] = 105; The 105 translates 'i' in the text.txt file (and pread() reads as 'i') Somehow the 105 is lost in translation"

请参阅此答案中链接多个位置的 ASCI 图表。字节值 105 实际上是字符“i”的 ASCI 值。 105 没有丢失;它被显示为它所代表的角色。

最后,pwrite() 是 Linux、BSD 和任何其他选择公开它的人的 POSIX 系统调用。它不是 C 或 C++ 标准的一部分。也就是说,pwrite() 的第一个参数应该从系统调用 open() 中获得。 .除非您通过支持的 API 执行此操作,否则您应该永远不要搭载假定由不同的 api 调用打开的文件描述符。这个问题的代码没有。

关于C++ pwrite(), pread() 数据到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548161/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com