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];