2015-02-05 1 views
-1

У меня есть NSString «3265», и я должен послать это к способу, в функции в файле «.c» имеет параметр unsigned shortПреобразование NSString к неподписанным в быстрой

здесь мой код ..

В .c файл

bool checkData(unsigned short num) { 

} 

В .swift файл

var number: NSString! = "3265" 

Мне нужно отправить '0x3265' в checkData функция.

Как я могу конвертировать 3265 (NSString) в 0x3265 (unsigned short)

+1

Вы уверены, что это C++? – Vinzenz

+0

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/index.html#//apple_ref/occ/instp/NSString/intValue –

+0

@HotLicks Судя по ссылке, которая вы отправили сообщение, я почти уверен, что вы неправильно поняли этот вопрос. – dasblinkenlight

ответ

-1

Вы можете использовать NSScanner конвертировать NSString шестнадцатеричном в int с:

int myVal; 
NSScanner *scanner = [NSScanner scannerWithString:number]; 
[scanner scanHexInt:&myVal]; 
bool myBool = scanData((unsigned short)myVal); 

Очевидно, что это является Objective-C, но вы должны быть в состоянии сделать это быстро, никаких проблем.

Возможно, это была идея установить myVal на -1, а затем проверить, что это >= 0 перед отправкой его в функцию scanData(), чтобы убедиться, что ошибок не произошло.

См. this SO question.

+0

Вы передаете адрес 'unsigned short' в функцию, ожидающую адрес' int'. Это может привести к сбою или любому неопределенному поведению. –

+0

См. Мое редактирование для обновленного кода. –

0

Это должно работать:

// This number is hex, not decimal (although it looks decimal) 
let str = "3265" 
// Hence we must parse it as a base-16 number: 
let num : CUnsignedShort = CUnsignedShort(strtoul(str, nil, 16)) 
// Convert it back to hex for printing 
println(String(num, radix:16)) // This should produce 3265 

Вызов strtoul преобразует строку в число, интерпретируя его в шестнадцатеричной. Затем вы делаете из него CUnsignedShort, который вы можете передать своей функции C.

0
NSString *numberString = @"42"; 
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle; 
NSNumber *number = [numberFormatter numberFromString:numberString]; 
short numberShort = [number shortValue];