Swift 3.1这个代码的equelent逻辑

时间:2017-08-02 06:49:29

标签: c swift swift3

我正在研究线性反馈移位寄存器,我必须安全地编写以下逻辑,我选择了swift,因为它比目标c更安全 如果我将以下C逻辑用作C文件本身,它是否安全?如果不是我试图在swift中编写以下代码

char * lfsr16_obfuscate( char *s, unsigned int length, unsigned int seed)
{
    unsigned int i, lsb;
    unsigned int lfsr = seed;

    for (i = 0; i < length*8; i++)          
    {
        lsb = lfsr & 1u;                
        lfsr >>= 1u;                    
        if (lsb == 1u)
        {
            lfsr ^= 0xB400u;
            s[i / 8] ^= 1 << (i % 8);   
        }
    }

    return s;
}

以下是我试过的快速equelent,但它正在崩溃,如下面的截图,请帮我在swift 3.1中编写上面的C代码

enter image description here

1 个答案:

答案 0 :(得分:1)

我真的不知道LFSR,但鉴于您提供的C代码,我认为swift端口可能是这样的:

func lfsr16_obfuscate(data: String, seed: Int) -> String {
    var scalars = Array(data.unicodeScalars).map { UInt8($0.value) }
    let len = data.characters.count
    var lsb: UInt
    var lfsr = UInt(seed)

    for i in (0..<len*8) {
        lsb = lfsr & 1
        lfsr >>= 1
        if 1 == lsb {
            lfsr ^= 0xB400
            scalars[i / 8] ^= UInt8(1 << (i % 8))
        }
    }

    return String(bytes: scalars, encoding: .ascii)!
}

确保您不会使用此函数处理任何包含ASCII字符以外字符的字符串。