【问题标题】:endianess test and type casting字节序测试和类型铸造
【发布时间】:2015-10-19 04:14:45
【问题描述】:

我知道要测试字节顺序,我可以执行以下操作:

bool IsLittleEndian(){

   int a = 1;

   char* ptr = (char*)&a;

   return *ptr;
}

我的问题是为什么我们不能像这样将int 转换为char 而不是int* 转换为char*

int a = 1;

char c = (char)a;

这样也行吗?否则,我们不能这样做的原因是什么?

【问题讨论】:

标签: c++ c endianness


【解决方案1】:

intchar 都是数字类型。由于编译器知道使用的体系结构,int 中的 1 将在 char 中变为 1,而不管字节顺序如何。我们使用指针来欺骗编译器不操作数据。

【讨论】:

    【解决方案2】:

    C 中的强制转换是一种尝试在新类型中尽可能好地表示原始值的操作(有一些例外)。

    它不采用位模式并将其重新解释为新类型,例如 (int)3.14 将导致 3 具有完全不同的位模式(可能)。

    因此(char)(int)1 始终是1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多