【发布时间】:2018-10-26 02:30:27
【问题描述】:
谁能帮我把这个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
}
【问题讨论】:
标签: objective-c xcode utf-8 swift4 nsdata