C Swift 3.1本规范的等效逻辑

C Swift 3.1本规范的等效逻辑,c,swift,swift3,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 < l

我正在研究线性反馈移位寄存器,我必须安全地编写以下逻辑,我选择了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;
}
char*lfsr16_模糊(char*s,无符号整数长度,无符号整数种子)
{
无符号整数i,lsb;
无符号整数lfsr=种子;
对于(i=0;i>=1u;
如果(lsb==1u)
{
lfsr^=0xB400u;

s[i/8]^=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)!
}
func lfsr16\u模糊(数据:字符串,种子:Int)->String{
var scalars=Array(data.descalars).map{UInt8($0.value)}
设len=data.characters.count
var lsb:UInt
变量lfsr=UInt(种子)
对于(0..>=1)中的i
如果1==lsb{
lfsr^=0xB400
标量[i/8]^=UInt8(1