Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 26位威根数有多少种十进制数的可能性?_C++ - Fatal编程技术网

C++ 26位威根数有多少种十进制数的可能性?

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

我已经使用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 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;
}