任何人都可以帮我将这个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>
我试图将其转换为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
}
答案 0 :(得分:0)
任何人都可以帮我将这个objective-c函数转换为swift4吗?
你的函数采用一串代表十六进制数字的字符,并转换每一对字符 - 两个十六进制数字,每个代表4个二进制位 - 并产生代表的字节值,即8个二进制位。
忽略Objective-C中的所有内容,但调用HCKBluetoothValidStr
除外,它可能会检查输入字符串是否有效
您仍然希望调用它,并编写自己的Swift代码以将String
转换为Data
。您需要将每个十六进制字符映射到它表示的整数;即"3"
至3
,"c"
至12
等;并将它们成对组合;例如类似于byteValue = firstDigitValue * 16 + secondDigitValue
。
如果你遇到问题,请提出一个新问题,显示你的Swift代码,毫无疑问,有人会帮助你。