在没有stringWithCString的情况下将void*转换为NSString*

uta*_*hak 1 objective-c keychain void-pointers nsstring

我有一个与Keychain交互的程序.你在一个指针传递给一个空指针和钥匙扣引导它,我想,到了密码,也传递一个UInt32的指针,它会指向密码的长度.

然后我需要将它用作NSString,我试图直接将其转换为它,但它聚合了更多的位然后需要,这对密码不起作用.我试着用:

NSString* password=[NSString stringWithCharacters:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)

这将密码更改为中文字符.不知道为什么.当我在调试模式下打印描述时,它给了我:

Printing description of password:
\u3039\u4839\u6d6f\u2165\u1566?
Run Code Online (Sandbox Code Playgroud)

我能够完美地使用它:

NSString* password=[NSString stringWithCString:passwordData length:passwordLength];
Run Code Online (Sandbox Code Playgroud)

但这是折旧的,我想避免使用它.我对C和Objective-C都很新,而且无效指针会引发我的循环.在调试模式下,我查看了指针指向的内存,它肯定在该内存位置.我尝试使用const char*,但它不喜欢说变量可能没有被初始化.

这是我用来获取钥匙串的方法

- (OSStatus) GetPasswordKeychain:(void*)passwordData length:(UInt32*)passwordLength label:(NSString*)serverName
{
 status=SecKeychainFindGenericPassword(NULL, (UInt32)[serverName length], [serverName UTF8String], usernameLength, username,passwordLength , passwordData, NULL);
return status;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让NSString以适当的长度指向那里,让它成为正确的东西.谢谢您的帮助.这个地方很棒!

uta*_*hak 7

在淘到Apple网站后,我发现了这个方法:

- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding
Run Code Online (Sandbox Code Playgroud)

这很有效.