在C语言中,我想用来自16位变量“c”的位来填充两个8位变量“a”和“b”。16位变量中的位被混洗而没有任何逻辑顺序,其可以是例如:答四|b.2款|b.6|b.0版本|a.零|答七|答六|b.1类|b.2款|b.7|b.4|答五|a.一|答二|b.3款|b.5有没有办法做到这一点?目标是有一个相当可行的查找表。
disbfnqx1#
此代码在复制initial后随机化和混洗c中的位,您声明它旨在用于嵌入式系统,但您没有提供任何信息说明它是哪个嵌入式系统,它可能是一个arduino,它可能是一个80年代的晦涩系统,它可能是一个diy pcb,附带一个随机stm32,我们无法知道:)
// Code is under public domain, use it like what you want #include <stdio.h> #include <stdint.h> #include <stddef.h> #include <time.h> int main() { srand(time(NULL)); uint16_t initial = 4040; /* 24 will be shuffled */ uint16_t c = 0; /* shuffle bits */ for(unsigned i = 0; i < sizeof(uint16_t) * 8; ++i) { c ^= initial & (1 << (rand() % 16)); } uint8_t a = 0; uint8_t b = 0; a = ((unsigned char*)&c)[0]; b = ((unsigned char*)&c)[1]; for(unsigned char i = 0; i < sizeof(uint16_t) * 8; ++i) { printf("%c.%d = %d | ", ('a' * ((i < 8))) + ('b' * ((i >= 8))), ((i + 1) * (i < 8)) + ((i + 1 - 8) * (i >= 8)), ((a >> i)) & 1); } return 0; }
这段代码将打印以下内容(显然你的代码将是随机的):a.1 = 1|a.2 = 0|a.3 = 1|a.4 = 1|a.5 = 0|a.6 = 1|a.7 = 1|a.8 = 1|b.1 = 0|b.2 = 0|b.3 = 0|b.4 = 1|b.5 = 0|b.6 = 1|b.7 = 0|b.8 = 0|
1条答案
按热度按时间disbfnqx1#
此代码在复制initial后随机化和混洗c中的位,您声明它旨在用于嵌入式系统,但您没有提供任何信息说明它是哪个嵌入式系统,它可能是一个arduino,它可能是一个80年代的晦涩系统,它可能是一个diy pcb,附带一个随机stm32,我们无法知道:)
这段代码将打印以下内容(显然你的代码将是随机的):
a.1 = 1|a.2 = 0|a.3 = 1|a.4 = 1|a.5 = 0|a.6 = 1|a.7 = 1|a.8 = 1|b.1 = 0|b.2 = 0|b.3 = 0|b.4 = 1|b.5 = 0|b.6 = 1|b.7 = 0|b.8 = 0|