我尝试使用initWithBytes将wchar_t字符串转换为NSString,但它总是返回null。
我已经尝试了以下代码,其中我的API返回NSString,但它始终返回null。
typedef struct CamList__Int_t
{
wchar_t DevicePath[MAX_CAM_DEV_SUPPORTED_INT][MAX_PATH];
UINT8 No_of_Cam_Devices;
}
CamList_Int;
-(NSString *)ConvertWcharStringToNSString :(const wchar_t *)inputString {
if (inputString == NULL) {
printf("inputString is Null, So there is No String Conversion taken Place!!!\r\n");
return NULL;
}
else {
printf("inputString: %s\r\n", inputString); //printing inputString for Debuging
return [ [NSString alloc] initWithBytes:inputString length:(wcslen(inputString) * sizeof(wchar_t)) encoding:NSUTF32LittleEndianStringEncoding ];
}
}
-(void) getConnectedDeviceName :(inout NSString *)deviceName {
CamList_Int CamDeviceListInt;
if(CreateCamDevicesLists(&CamDeviceListInt) == true) {
deviceName = [self ConvertWcharStringToNSString: CamDeviceListInt.DevicePath[0]];
}
}
请帮助我解决这个问题。
先谢谢
答案 0 :(得分:0)
您好我发现编码标志有问题,更改后它运行正常。
在下面给出重新编辑的API调用,该调用将返回NSString而不为null。
-(NSString *)ConvertWcharStringToNSString :(const wchar_t *)inputString {
if (inputString == NULL) {
printf("inputString is Null, So there is No String Conversion taken Place!!!\r\n");
return NULL;
}
else {
printf("inputString: %s\r\n", inputString); //printing inputString for Debuging
return [ [NSString alloc] initWithBytes:inputString length:(wcslen(inputString) * sizeof(wchar_t)) encoding: NSUTF8StringEncoding ];
}
}
谢谢