我有一个与钥匙串交互的程序。你传入一个指向 void 指针的指针,我猜钥匙串将它指向密码,你还传入一个 UInt32 指针,它将指向密码的长度。
然后我需要将其用作 NSString,我尝试直接将其转换为这样,但它聚合了所需的更多位,并且不适用于密码。我尝试使用:
NSString* password=[NSString stringWithCharacters:passwordData length:passwordLength];
这将密码更改为类似中文的字符。不知道为什么。当我在调试模式下打印描述时,它给了我:
Printing description of password:
\u3039\u4839\u6d6f\u2165\u1566�
我能够让它完美地工作:
NSString* password=[NSString stringWithCString:passwordData length:passwordLength];
但这是折旧的,我想避免使用它。我对 C 和 Objective-C 都很陌生,void 指针让我陷入循环。在调试模式下,我查看了指针指向的内存,它肯定在那个内存位置。我尝试使用 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;
}
有没有办法让 NSString 以正确的长度指向那里并让它成为正确的东西。谢谢您的帮助。这个地方很棒!