Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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++;到C#解码联邦政府';t FASC-N(联邦机构智能卡号)_C#_C++_Encoding - Fatal编程技术网

移植C++;到C#解码联邦政府';t FASC-N(联邦机构智能卡号)

移植C++;到C#解码联邦政府';t FASC-N(联邦机构智能卡号),c#,c++,encoding,C#,C++,Encoding,我需要把C++的代码段移植到解码一些BCD字节的C语言中,但是我对C语言很陌生,所以我遇到了使用%、>>和&运算符的问题。 下面是编码描述 FASC-N上的数据使用称为二进制编码的过程进行编码 十进制(BCD)。它每个字符使用5位(4个数据位和1个奇偶校验) 位)并生成16个字符集。编码完整的40个字符 BCD数字格式的FASC-N产生200位信息。相当地 与一次传输一个字符的数据相比,数据可以打包 每个传输字节包含8个有意义位(例如 第一个字符的完整5个字符加上第二个字符的前3个字符)。 因此

我需要把C++的代码段移植到解码一些BCD字节的C语言中,但是我对C语言很陌生,所以我遇到了使用%、>>和&运算符的问题。 下面是编码描述

FASC-N上的数据使用称为二进制编码的过程进行编码 十进制(BCD)。它每个字符使用5位(4个数据位和1个奇偶校验) 位)并生成16个字符集。编码完整的40个字符 BCD数字格式的FASC-N产生200位信息。相当地 与一次传输一个字符的数据相比,数据可以打包 每个传输字节包含8个有意义位(例如 第一个字符的完整5个字符加上第二个字符的前3个字符)。 因此,这200位可以以25字节(200字节)的形式传输 位除以每字节8位)。因此,40个字符的FASC-N变为 25字节BCD编码的传输

我有25字节的数据,需要解码到40字节

下面是C++:

byte byBCD, byBCDs, byBits, byShift = 0x80, by, nn;
byte FASCN_ReadChars[40] = {0};

// an example raw FASCN
byte FASCN[25] = { 0xd1, 0x38, 0x10, 0xd8, 0x21, 0x0c, 0x2c, 0xd2, 0x54, 0x88, 0x85, 0xa1, 0x68, 0x58, 0x21, 0x08, 0x42, 0x10, 0x84, 0x30, 0x81, 0x38, 0x10, 0xc3, 0xf3 };

nn = 0;
byBCD = 0;
byBits = 0;
byBCDs = 0;

for (nn = 0; nn < 200; nn++)
{
    if (FASCN[(nn / 8)] & (byShift >> (nn % 8)))    /* Databit = 1 */
        byBCD = (byBCD | (0x01 << (nn % 5)));

    byBits++;    /* bit counter (per 5) */

    if (byBits == 5)
    {                               
        /* each 5 bits is a character */
        for (by = 0; by < NO_OF_ABA_CHARS; by++)
        {
            if (byBCD == abyABAMap[by])
            {
                FASCN_ReadChars[byBCDs++] = by;
                break;
            }
        }

        byBits = byBCD = 0;    /* reset bit counter and byBCD */
    }
}
所以我把这条线分解成每一个操作,看看哪个在抱怨

byte b1 = FASCN[(nn / 8)];
byte b2 = (nn % 8);
byte b3 = (byShift >> b2);
下面两个给出了类型错误,所以我将它们转换为(字节)

所以我尝试了带b1和b3的if(),但再次得到一个“不能隐式地将类型'int'转换为'bool'”

关于如何在C#中设计if语句有什么想法吗


任何感兴趣的人都可以通过阅读本文档的第5.4、6.0和6.1节来进一步查看FASCN-

C/C++会将任何非0值视为true,将0视为false,但C#希望布尔表达式的计算结果为true或false

试试下面的方法

if (b1 & b2 != 0)

C/C++会将任何非0值视为true,将0视为false,但C#希望布尔表达式的计算结果为true或false

试试下面的方法

if (b1 & b2 != 0)
if(b1 & b3)
if (b1 & b2 != 0)