C++ 26位威根数有多少种十进制数的可能性?
我已经使用ESP32成功地模拟了26位Wiegand信号。基本上,程序将手动输入的十进制数转换为正确的26位Wiegand二进制数,然后通过以下两条线路发送:C++ 26位威根数有多少种十进制数的可能性?,c++,C++,我已经使用ESP32成功地模拟了26位Wiegand信号。基本上,程序将手动输入的十进制数转换为正确的26位Wiegand二进制数,然后通过以下两条线路发送: bool*wiegandArray=newbool[26]; 无效getWiegand(未签名整数十二月){ //使用单位移位操作将dec数转换为二进制数 //并将其储存在维根达里[] 对于(int i=24;i>0;--i){ 威根达赖[i]=12月&1日; 12月>>=1; } //检查前12位的奇偶校验 布尔偶=0; 对于(int
bool*wiegandArray=newbool[26];
无效getWiegand(未签名整数十二月){
//使用单位移位操作将dec数转换为二进制数
//并将其储存在维根达里[]
对于(int i=24;i>0;--i){
威根达赖[i]=12月&1日;
12月>>=1;
}
//检查前12位的奇偶校验
布尔偶=0;
对于(int i=1;i<13;i++){
甚至^=威根达赖[i];
}
//根据前12位中的“一”数,将0或1添加为第一位(前导奇偶校验位-偶数)
wiegandArray[0]=偶数;
//检查最后12位的奇偶校验
布尔奇数=1;
对于(int i=13;i<25;i++){
奇数^=wiegandArray[i];
}
//根据最后12位中的“一”数,将0或1添加为最后一位(尾随奇偶校验位-奇数)
威根达赖[25]=奇数;
}
使用此方法,我可以为26位Wiegand数生成适当的十进制数
现在,我面临的问题是,最终用户将实际输入一个卡ID。卡ID是一个十进制数,应始终产生24位二进制数:8位设备代码和16位ID代码
。在这个24位的数字上,我应用奇偶校验位得到一个26位的代码
例如:
- 卡ID=16336141/101000110001100101101
- 设施代码:163/10100011
- 卡号:36141/1000110100101101
- 结果26威根:10718509/1101000111000101001011010
如何从0生成26位Wiegand?这将是0000000000000000000000000000001。
最大的24位数字是16777215。但是
8位表示站点代码(0-255),16位表示卡号(0-65535)
表示255*65535=16711425
实际范围是多少?我应该从0开始生成26位Wiegand二进制数吗
bool* wiegandArray = new bool[26];
void getWiegand(unsigned int dec) {
// transform dec number into binary number using single bit shift operation
// and store it in wiegandArray[]
for (int i = 24; i > 0; --i) {
wiegandArray[i] = dec & 1;
dec >>= 1;
}
// check for parity of the first 12 bits
bool even = 0;
for(int i = 1; i < 13; i++) {
even ^= wiegandArray[i];
}
// add 0 or 1 as first bit (leading parity bit - even) based on the number of 'ones' in the first 12 bits
wiegandArray[0] = even;
// check for parity of the last 12 bits
bool odd = 1;
for(int i = 13; i < 25; i++) {
odd ^= wiegandArray[i];
}
// add 0 or 1 as last bit (trailing parity bit - odd) based on the number of 'ones' in the last 12 bits
wiegandArray[25] = odd;
}