Ios 在swift中将NSString转换为无符号短字符串

Ios 在swift中将NSString转换为无符号短字符串,ios,objective-c,c,swift,nsstring,Ios,Objective C,C,Swift,Nsstring,我有一个NSString“3265”,我必须将它发送到“.c”文件中函数中的一个方法,该文件有一个参数无符号short 这是我的密码 在.c文件中 bool checkData(unsigned short num) { } var number: NSString! = "3265" 在.swift文件中 bool checkData(unsigned short num) { } var number: NSString! = "3265" 我需要将“0x3265”发送到chec

我有一个
NSString
“3265”,我必须将它发送到“
.c
”文件中函数中的一个方法,该文件有一个参数
无符号short

这是我的密码

.c
文件中

bool checkData(unsigned short num) {

}
var number: NSString! = "3265"
.swift
文件中

bool checkData(unsigned short num) {

}
var number: NSString! = "3265"
我需要将“
0x3265
”发送到
checkData
函数


如何将
3265
NSString
)转换为
0x3265
unsigned short

您可以使用NSScanner将
NSString
十六进制转换为
int
s:

int myVal;
NSScanner *scanner = [NSScanner scannerWithString:number];
[scanner scanHexInt:&myVal];
bool myBool = scanData((unsigned short)myVal);
很明显,这是objective-c,但您应该能够在swift中毫无问题地做到这一点

在将myVal发送到
scanda()
函数之前,最好将myVal设置为-1,然后检查它是否
=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函数。

你确信这是C++ +?@ HistLIKS,从你所发布的链接判断,我几乎肯定你误解了这个问题。OP没有提到十六进制编码数据。您正在将
无符号short
的地址传递给一个需要
int
地址的函数。这可能导致崩溃或任何类型的未定义行为。
NSString *numberString = @"42";
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *number = [numberFormatter numberFromString:numberString];
short numberShort = [number shortValue];