无法将objective-c代码转换为swift 4

时间:2018-05-16 06:43:57

标签: objective-c xcode utf-8 swift4 nsdata

任何人都可以帮我将这个objective-c函数转换为swift4吗? 我已经尝试过Swiftify,但它输出错误。此外,我尝试过字符串到数据的转换,但输出错误。

- (NSData *)stringToData{
if (!HCKBluetoothValidStr(self)) {
    return nil;
}
if (!(self.length % 2 == 0)) {
    return nil;
}
Byte bytes[255] = {0};
NSInteger count = 0;
for (int i =0; i < self.length; i+=2) {

    NSString *strByte = [self substringWithRange:NSMakeRange(i,2)];
    NSLog(@"strbyte is: %@ \n\n",strByte);
    unsigned long red = strtoul([strByte UTF8String],0,16);
    Byte b =  (Byte) ((0xff & red) );//( Byte) 0xff&iByte;
    bytes[i/2+0] = b;
    count ++;
}
NSData * data = [NSData dataWithBytes:bytes length:count];
return data;

}

对于相同的函数输入字符串是:

NSString *commandStr = @"1702030a0a";

以NSData格式的函数输出:

<1702030a 0a>

编辑1:

我试图将其转换为swift,但strString.utf8CString给出的错误为“无法将类型'ContiguousArray'(又名'ContiguousArray')的值转换为预期的参数类型'UnsafePointer!'”

func stringToData(stringVal: NSString) -> NSData {
    var bytes: [UInt8] = [0]
    var count: Int = 0
    var i = 0
    for index in stride(from: 0, to: stringVal.length , by: 2) {
        var strByte: NSString = stringVal.substring(with: NSMakeRange(index, 2)) as NSString
        print("strbyte is: \(strByte) \n\n")
        let strString = String(strByte)
        print(strString)
        var red: UInt8 = strtoul(strString.utf8CString, 0, 16)


        let b = UInt8((0xff & red))
        count = count+1
    }
    var data = NSData(bytes: bytes, length: count)
    return data
}

1 个答案:

答案 0 :(得分:0)

  

任何人都可以帮我将这个objective-c函数转换为swift4吗?

你的函数采用一串代表十六进制数字的字符,并转换每一对字符 - 两个十六进制数字,每个代表4个二进制位 - 并产生代表的字节值,即8个二进制位。

忽略Objective-C中的所有内容,但调用HCKBluetoothValidStr除外,它可能会检查输入字符串是否有效  您仍然希望调用它,并编写自己的Swift代码以将String转换为Data。您需要将每个十六进制字符映射到它表示的整数;即"3"3"c"12等;并将它们成对组合;例如类似于byteValue = firstDigitValue * 16 + secondDigitValue

如果你遇到问题,请提出一个新问题,显示你的Swift代码,毫无疑问,有人会帮助你。