郢书燕赵

问题描述 投票:-1回答:1

我有以下C语言的大恩迪安。

int32_t num = 0x01234567;

我想把它转换为中间的小恩迪亚,就像这样。0x45670123

在C语言中,我如何使用位运算符来完成这个任务。

c bitwise-operators bit bit-shift
1个回答
1
投票

一个很简单的方法是

  • 读取一个字节 num 与AND运算符。
  • 将读取的字节移位到你想要的输出数的位置。
  • 或将移位后的字节与您的输出数进行匹配。
  • 重复操作,直到完成。

例子:

uint32_t num = 0x01234567;
uint32_t output = 0;

uint32_t firstByte = num & 0xff000000; // firstByte is now 0x01000000
// Where do we want to have 0x01 in the output number?
// 0x45670123
//       ^^ here
// Where is 0x01 currently?
// 0x01000000
//   ^^ here
// So to go from 0x01000000 to 0x00000100 we need to right shift the byte by 16 (4 positions * 4 bits)
uint32_t adjByte = firstByte >> 16; // adjByte is now 0x0100
// OR with output
output |= adjByte;

AND, Shift & OR运算符在wikipedia上.

© www.soinside.com 2019 - 2024. All rights reserved.