PRJ - Swap Bits Lf#

2024-05-29

/* 一个字节内的比特左右蝶式交换

Reference

码表: https://www.cnblogs.com/prosim/articles/17447891.html

蝶式计算方法: https://blog.csdn.net/karaxiaoyu/article/details/79839894

https://blog.csdn.net/masibuaa/article/details/8188201

https://blog.csdn.net/karaxiaoyu/article/details/79839894
*/

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
byte data_table[] = { 0x3f, 0x06,  0x5b,  0x4f,  0x66,  0x6d,  0x7d,  
                      0x07, 0x7f,  0x6f,  0x77,  0x7c,  0x39,  0x5e,  
                      0x79,  0x71 };

  for (int i = 0; i < 16; i++) {
    byte data = data_table[i];
    byte out = swap_bits_lf(data);

    Serial.print(data, HEX);
    Serial.print(" -- > ");
    Serial.print(out, HEX);
    Serial.print('\n');
  }
}

void loop() {
  // put your main code here, to run repeatedly:
}

byte swap_bits_lf(byte data) {
  data = (data << 4) | (data >> 4);
  data = ((data << 2) & 0xcc) | ((data >> 2) & 0x33);
  data = ((data << 1) & 0xaa) | ((data >> 1) & 0x55);
  return data;
}