如果我有一个字符数组A
,我用它来存储十六进制
A = "0A F5 6D 02" size=11
这个字符数组的二进制表示是:
00001010 11110101 01101101 00000010
我想问有没有什么函数可以随机翻转位?
即:
如果参数是5
00001010 11110101 01101101 00000010
-->
10001110 11110001 01101001 00100010
它会随机选择5位进行翻转。
我正在尝试将此十六进制数据转换为二进制数据并使用位掩码方法来实现我的要求。然后将其转回十六进制。我很好奇有什么方法可以更快地完成这项工作吗?
抱歉,我的问题描述不够清楚。简而言之,我有一些十六进制数据,我想模拟这些数据中的位错误。例如,如果我有 5 字节的十六进制数据:
"FF00FF00FF"
二进制表示为
"1111111100000000111111110000000011111111"
如果误码率为10%。然后我想让这40位有4位错误。一个极端的随机结果:前4位发生错误:
"0000111100000000111111110000000011111111"
最佳答案
首先,找出该位代表哪个字符:
param 是你要翻转的部分...
char *byteToWrite = &A[sizeof(A) - (param / 8) - 1];
这样会给你一个指向该数组偏移量处的字符的指针(-1表示0数组偏移量与大小)
然后获取模数(或者如果您喜欢冒险的话,可以进行更多的位移)来找出要翻转的部分:
*byteToWrite ^= (1u << param % 8);
因此,A[10]
处的字节的参数应该为 5,以切换其第 5 位。
关于c++ - 如何在 C/C++ 中随机翻转 char 的二进制位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24181878/