【问题标题】:Getting the least significant byte获取最低有效字节
【发布时间】:2011-10-08 14:36:18
【问题描述】:

我没有在大端处理器上进行过测试,但这是否总是给我最低有效字节?

int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);

【问题讨论】:

  • (meta) 如果你使用 static_cast,你不应该将问题标记为 C。我不会重新标记它,因为我认为你这样做更好(所以你学习标记礼仪:-))

标签: c++


【解决方案1】:

是的,这将始终为您提供最低有效字节。 C++ 规范(§4.7/2)保证缩小转换总是通过返回与原始整数一致的最小值,模 2n 来丢弃最重要的字节,其中 n 是位数在目标类型中。

也就是说,不能保证unsigned char 是单个字节。所有可以保证的是sizeof(char) == 1。但是,如果您将字节视为能够容纳字符的最小内存单元,那么这应该可以正常工作。

【讨论】:

  • @templatetypedef: unsigned char 也是单字节。见 $5.3.3/1
  • @Nawaz 但标准不保证这一点。
  • @user32344:我也发布了参考!
  • @Nawaz- 嗯...这很有趣,因为 C++ 规范将字节定义为在 C++ 内存模型中 的最小可寻址单元,但有人可以制作一个兼容的 C++ 实现,其中一个 C++“字节”将是本机系统上的两个字节,只要一切都是一致的。不过,这将是一个病态的邪恶边缘案例,专门用于证明一个观点。
【解决方案2】:

下面的方法不也可以吗?

int i = 12345678;
unsigned char c = (i % 256);

int i = 12345678;
unsigned char c = (i & 255);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2019-08-03
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多