【问题标题】:how to get a const int pointing to a file's address如何获取指向文件地址的 const int
【发布时间】:2012-06-07 04:55:14
【问题描述】:

我正在用 c neon 内在函数编写一个关于 bmp 文件解析的程序。这些函数需要一个指向源文件目标的 const int .. 但是通过使用 fstream 和 fopen a 获取指向源的文件对象。那么如何将其转换为 const int 指针

【问题讨论】:

  • Neon 内在函数不适用于文件,它们适用于寄存器/内存。您必须先将文件读入内存。
  • 如果我听起来很幼稚,我很抱歉,但我应该怎么做
  • 如果您不知道如何将文件读入内存,那么您还没有准备好使用 NEON 等 SIMD。我建议阅读介绍性 C 编程书籍或教程。
  • 感谢您的建议。但我必须完成工作。无论如何,我在网上看了它并学会了将文件数据存储在内存中的缓冲区中..:)
  • 您想要const int 还是const int*?它们非常不同——前者没有多大意义。 (我不确定后者是否也可以,除非 bmp 作为 ints 的数组存储在内存中。)

标签: c file pointers file-handling


【解决方案1】:

你可以试试这个:

const int *intFile = (int *)fopen("path-to-file.bmp", "r");

您始终可以使用强制转换将指向某种类型的指针分配给指向任何其他类型的指针,例如:

int i;
int  *ptrInt  = &i;        // this doesn't need a cast
char *ptrChar = (char*)&i; // this does need a cast

在这种情况下,ptrChar 指向i 的“第一个”字节。这个“第一个”字节可以是 LSB 或 MSB,具体取决于您的机器是分别使用小端还是大端。

请注意,如果谨慎使用,进行此类转换非常有用,但涉及低级概念,并且可能不安全。

现在,您总是可以直接将指针分配给相同类型的 const 指针:

char c;
char *pc = &c;
const char *cpc = pc;

所以,不用写const int *intFile = (const int*) ...

在最后一个例子中,const char *cpc 表示c 不能通过cpc 修改,即cpc 是“指向 const char 的指针”:

*cpc   = 'H';   // error
cpc[0] = 'j'; // error

【讨论】:

  • 首先,intFILE 是完全不同的类型。指向FILE 结构的int* 指针(顺便说一句,它是不透明的)是完全随机的,对任何东西都没有用(除了非常特殊的函数,它有错误的原型并将int* 转换回@987654337 @ 内部,这只是简单的破坏)。此外,在 C 中不能保证 sizeof(int*) == sizeof(FILE*) 所以实际的演员表也可能是无效的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
相关资源
最近更新 更多