【问题标题】:Is char* used as the location of a byte in memory?char* 是否用作内存中字节的位置?
【发布时间】:2015-09-25 06:10:45
【问题描述】:

我知道这段代码的作用:将 &x 指向的内存中的内容复制到文件中,大小为 sizeof(double) 字节;读取文件并复制到 &y 指向的内存中,大小为 sizeof(double) 字节。

double x,y;
std::ofstream out( "abc.dat", std::ios::out | std::ios::binary);
out.write( reinterpret_cast<const char*>(&x), sizeof(double));
out.close();

std::ifstream in( "abc.dat", std::ios::in | std::ios::binary);
in.read( reinterpret_cast<char*>(&y), sizeof(double));
in.close();

据我了解,在进行二进制 IO 时,文件和 RAM 之间流动的数据应该是以字节为单位的。然后 &x 地址应该作为字节位置传递:像 out.write( reinterpret_cast(&x), sizeof(double)) 这样的东西是有意义的。但是C++并没有定义字节类型,这里的char*可以理解为字节位置,对吗?我注意到 char 的大小与一个字节相同,它们都是 8 位。

【问题讨论】:

  • 回答标题中的问题:是的。
  • char 被定义为 1 字节并且能够为任何类型起别名,这就是为什么读写函数使用指向 char 的指针
  • 哎呀是类型错误@M.M
  • 是的。 char 是“字节”,但似乎 unsigned char 是“更好的字节”
  • 谢谢各位,我想我现在明白了。几年前那个糟糕的讲师说 char 相当于 int....这导致了这些恐慌。

标签: c++ file-io binaryfiles


【解决方案1】:

是的,在 c++ 中 char 的大小是 1 个字节。

除此之外,尺寸更流畅一些。这就是为什么一些供应商提供保证大小的非标准扩展。例如,在 Microsoft VC 中,WORD 是 16 位的。

查看此页面了解更多信息:http://en.cppreference.com/w/cpp/language/types

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2011-11-16
    • 1970-01-01
    • 2010-10-15
    相关资源
    最近更新 更多