c++ - 如何在 C/C++ 中随机翻转 char 的二进制位

标签 c++ c

如果我有一个字符数组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/

相关文章:

c - 如何在 C 中链接目标文件? "Undefined symbols for architecture x86_64"失败

c - 如何在运行时创建单链表并对其进行排序?

c++ - 多源 .cpp 文件问题

c++ - Qt4 : Decorating a QLineEdit (painting around it)

c++ - mysql 连接器/C++ 手册

c++ - 如何获取字符串中特定元素的地址

c++ - 如何从函数地址或类中找到 CFBundleRef

c++ - 这个模式 : using a struct to contain a single method 有什么意义

C编程: how to create a game board with tokens in each cell?

c - 为什么 C 程序打印 0D 而不是 0? (当 EOF 作为 Ctrl+D 发送时)