【问题标题】:Correct way to cast address of int to char pointer将int地址转换为char指针的正确方法
【发布时间】:2012-01-24 11:22:04
【问题描述】:

如果我需要从 ifstream 中读取 int

int myInt = 0;
fileStream.read(reinterpret_cast<char*>(&myInt), sizeof(int));

是否使用reinterpret_cast&lt;char*&gt; 正确的方法来完成此操作?

【问题讨论】:

  • 考虑使用sizeof myInt 以不重复该类型,并且如果您稍后决定将类型更改为例如long 可能大小不同。
  • 谢谢。使用sizeof myInt 听起来是个好主意
  • 我对实际问题有点困惑。是如何从ifstream 读取ints,正如问题本身所表明的那样,还是如何从int 转换为char*,正如标题所暗示的那样?
  • @hmjd:两者都有。必须将int* 转换为char*,以便将int 的对象表示从ifstream 直接读取到int。您可以通过执行char tmp[sizeof myInt]; filestream.read(tmp, sizeof myInt); std::memcpy(&amp;myInt, &amp;tmp, sizeof myInt); 之类的操作来避免直接阅读,从而避免强制转换。但是仅仅为了将这个问题变成两个问题而编写该代码是毫无意义的;-)

标签: c++ pointers casting


【解决方案1】:

是否使用 reinterpret_cast 正确的方法来完成该任务?

是的。更喜欢 c++ 样式转换,而不是 c 样式转换。

根据 cmets 的建议,使用 read method function 的更好方法是:

int myInt = 0;
fileStream.read(reinterpret_cast<char*>(&myInt), sizeof(myInt));

【讨论】:

  • 我不同意这个答案(不是关于 c++ 和 c 风格转换的评论),请参阅下面 Jon 的回答。
  • @Walter 左边有一个反对票。但是,如果从二进制文件中读取 Jon 的答案,它将不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2010-12-14
  • 2013-01-10
相关资源
最近更新 更多