【问题标题】:How to work with left and right bytes of a short int? [closed]如何使用短整数的左右字节? [关闭]
【发布时间】:2013-02-16 01:47:05
【问题描述】:

我有一个短整数,即 2 个字节,但我只想将左字节输出到文件。我该怎么做呢?我正在使用二进制函数 open()、read()、write() 等。

我也想把右边的字节左移8次,这样右边的字节占据左边,右边已经清零了。

对于没有展示我已经尝试过的内容,我深表歉意——我是 C 菜鸟,找不到任何关于如何做到这一点的信息。

【问题讨论】:

  • 你需要尝试一下...
  • 阅读位运算符,并实验!您还应该记住,值的“左”和“右”在很大程度上取决于底层平台(请参阅endianess)。
  • 查看graphics.stanford.edu/~seander/bithacks.html 以获得一些灵感。但是永远不要忘记,偶尔花费几微秒的执行时间比一个下午挠头的代价要少得多,因为您不再了解代码是如何工作的。编写完成这项工作的最简单的代码,检查它是否符合标准(您的编译器和机器改变!)。只有当 measurements 显示它是值得的,并且编译器不会自己做时才开始烦躁。组织和算法应该是您审查的首要目标。
  • 没有。一个短整数是sizeof (short int) 字节。该值不能保证为 2。有些系统的 sizeof (short int) == 1。@JoachimPileborg:鼓励关于转移负整数的实验是愚蠢的。左移负值是未定义的行为,右移可能会导致陷阱表示或异常情况,根据 6.2.6.1p5 和 6.5p5 也会导致未定义的行为。

标签: c int byte bit short


【解决方案1】:

你可以试试这个方法

    int someNum = 0x1234;
    int  leftByte, rightByte;

    leftByte = (someNum >> 8) & 0xff;
    rightByte = (someNum) & 0xff;

【讨论】:

  • 不要穿短裤。它们提供的好处很少。改用整数。 stackoverflow.com/questions/13589183/…
  • 好的.. 谢谢。我使用short int 来指示用户所需的16 bit 数据类型。我将修改我的示例以仅使用int
  • 我建议将负值与正值分开处理。
  • @modifiablelvalue 从问题中,我推测用户期望从类似于解包操作的 16 位值中提取两个 8 位值。因此,我不确定最初的问题是否也意味着符号处理
猜你喜欢
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多