c - 这段代码的 Swift 3.1 等效逻辑

标签 c swift swift3

我正在研究线性反馈移位寄存器,我必须安全地编写以下逻辑,我选择了 swift,因为它比 Objective 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;
}

下面是我尝试过的 swift equelent,但是它崩溃了,如下截图所示,请帮我在 swift 3.1 中编写上面的 C 代码

enter image description here

最佳答案

我不太了解 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 字符以外的字符的字符串。

关于c - 这段代码的 Swift 3.1 等效逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45453429/

相关文章:

c - 在 c 中用另一个字符串替换一部分字符串的最佳方法?

c - 当我想添加一些东西作为链表的头部时,为什么我的代码不起作用?

ios - swift2 将文本文件的内容加载到变量中

ios - SpriteKit 滚动背景图像显示图像之间的线条

ios - 在 iOS WKWebView 中设置 "Disable web security"和 "allow file access from files"

swift - swift 3 中的核心数据轻量级迁移不起作用

ios - 如何将 UIDatePicker 中的数据显示到 UITableView 中?

ios - Swift 3.0,Alamofire 4.0 调用中的额外参数 'method'

C 结构解释 Push_vlan = (struct vlan_header *)((uint8_t *)new_eth + eth_size);

objective-c - 从 PID 获取名称?