将fpos_t强制转换为int或char

我正在使用一个函数,该函数使用按位操作和文件的长度: fpos_t flen;

当我尝试将其转换为int或char,或尝试对其进行算术运算时,它失败并出现以下编译错误: error: aggregate value used where an integer was expected

你在滥用那种类型。 首先,它不代表长度。 它代表一个位置 。 其次,它只是用于调用fsetpos 。 你不打算对它进行算术运算,因为它不一定代表数字类型。 它包含您的库需要能够执行fsetpos操作的任何信息。 在库的实现中, fpos_t似乎是聚合类型,例如结构。 (您可以检查头文件中的定义以确定,但不要依赖于您在那里发现的任何内容;它在其他平台或标准库的未来版本中可能会有所不同。)

至于你的下一步,考虑一个更直接的问题,当你提出在fpos_t上进行按位操作的想法时,如何解决你正在处理的任何问题。

当我尝试这样做时,我得到了同样的错误:char aux =(char)flen&15,其中flen是fpos_t。 我在这里找到了一个解决方案: http : //dsmarkchen.blogspot.com.br/2008/08/fpost.html 。 它应该是:char aux = flen .__ pos&15。

听起来您希望将当前文件位置作为整数使用。 如果是这样,你可能想要使用ftell / fseek(或他们的64位兄弟),而不是fgetpos / fsetpos。 两者都提供类似的操作,但ftell / fseek使用整数值,而fgetpos / fsetpos使用有意抽象的结构。