|
发表于 2018-6-14 19:43:12
|
显示全部楼层
LZ要的是这个效果吗?
- #include "stdio.h"
- #include "stdint.h"
- #include "stdlib.h"
- void bit_swap(uint8_t * in, uint16_t * out)
- {
- uint32_t * dat_grp = (uint32_t *)in;
- uint32_t val;
- /* Load new Group */
- val = *(dat_grp++);
- out[0] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[1] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[2] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[3] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[4] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[5] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[6] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28; val >>= 1;
- out[7] = (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 28;
-
- /* Load new Group */
- val = *(dat_grp++);
- out[0] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[1] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[2] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[3] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[4] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[5] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[6] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24; val >>= 1;
- out[7] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 24;
-
- /* Load new Group */
- val = *(dat_grp++);
- out[0] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[1] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[2] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[3] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[4] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[5] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[6] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20; val >>= 1;
- out[7] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 20;
-
- /* Load new Group */
- val = *(dat_grp++);
- out[0] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[1] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[2] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[3] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[4] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[5] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[6] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16; val >>= 1;
- out[7] |= (((val & 0x01010101) * 0x10204080) & 0xF0000000) >> 16;
- }
- int main(void)
- {
- int i;
- uint8_t input[16] =
- {
- 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
- 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42
- };
- uint16_t output[8];
- bit_swap(input, output);
- /* Dump */
- printf("Input: \n ");
- for(i = 0; i < 16; i++)
- {
- printf("0x%02X", input[i]);
- }
- printf("\n");
- //
- printf("Output: \n ");
- for(i = 0; i < 8; i++)
- {
- printf("0x%04X\n ", output[i]);
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|