为什么将wchar_t *转换为NSString *总是使用initWithBytes返回null,我的代码中是否有任何错误。

时间:2016-10-03 12:01:32

标签: objective-c nsstring wchar-t

我尝试使用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]];
        }
    }

请帮助我解决这个问题。

先谢谢

1 个答案:

答案 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 ];
        }
    }

谢谢