【问题标题】:Get single bytes from a word [duplicate]从单词中获取单个字节[重复]
【发布时间】:2012-05-21 19:52:53
【问题描述】:

可能重复:
How to get the value of individual bytes of a variable?

如何在不使用按位运算(即使用算术运算?)的情况下从一个单词(例如 C 中的 unsigned int)中获取单个字节?

我不知道为什么,但是 x 数字的这个公式(C-Like)似乎不起作用:

floor(x / pow(R, i)) % R

其中R 是表示数字的基数,i 用于指示要获取的第i 个字节。

【问题讨论】:

  • 您不想使用按位运算符的任何特殊原因?
  • 这是您的第 6 个问题。您没有接受任何答案,也从未投票。请阅读faq 并努力回馈您寻求帮助的社区。​​span>

标签: c numbers


【解决方案1】:

如果你真的需要避免按位操作,你也可以作弊(小心你使用的是小端或大端机器!):

char *int_16_storage;
uint16_t the_word = 0xabcd;
int_16_storage = &the_word;

uint8_t low_byte = int_16_storage[0];
uint8_t high_byte = int_16_storage[1];

【讨论】:

  • 也可以使用联合来完成,它不依赖于指针来工作。
  • 指针有什么问题?
  • 指针没有什么“错误”,但它们会使代码更难阅读。使用联合,更容易确定您正在完成的工作。
  • 另一方面,联合体的这种使用是未定义的并且明显不可移植。
  • @DavidHeffernan “非便携式”,是的。如脚注 82 所述,“未定义”,不在 C90 和 C99TC3 中。
猜你喜欢
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多