Может кто-нибудь помочь мне преобразовать эту функцию target-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
}