Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C隐式转换失去整数精度(从大小转换为CC长度)_Objective C_Macos - Fatal编程技术网

Objective-C隐式转换失去整数精度(从大小转换为CC长度)

Objective-C隐式转换失去整数精度(从大小转换为CC长度),objective-c,macos,Objective C,Macos,我有一个函数生成字符串的sha256加密 下面是函数: -(NSString*)sha256HashFor:(NSString*)input { const char* str = [input UTF8String]; unsigned char result[CC_SHA256_DIGEST_LENGTH]; CC_SHA256(str, strlen(str), result); NSMutableString *ret = [NSMutableS

我有一个函数生成字符串的sha256加密

下面是函数:

    -(NSString*)sha256HashFor:(NSString*)input
{
    const char* str = [input UTF8String];
    unsigned char result[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(str, strlen(str), result);

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
    for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
    {
        [ret appendFormat:@"%02x",result[i]];
    }
    return ret;
}
我猜我只需要将strlen(str)转换为CC_-Long,但我不知道该怎么做

  • 大概这不是一个错误,而是一个警告

  • “我只需要将strlen(str)转换为CC_Long,但我不知道如何实现。”-显式类型转换(类型转换):
    (CC_Long)strlen(str)
    ,但我认为您并不真正需要它


  • 从iOS的角度来看,CC_LONG(又称uint32_t)和size_t(unsigned LONG)是不兼容的大小,这一事实在某些应用程序中可能会引起安全性/稳定性问题,特别是在处理可重用库函数时

    MD5散列是一个128位的散列,具有潜在的无限长消息,因此有理由发出此警告。如果截断长度大于2^32,则会产生错误的哈希

    您的代码应该在逻辑上决定它可以支持多大的字符串。在本例中,使用CC_MD5时,它必须是2^32字节


    此代码不会显示任何警告,并且工作正常

    - (NSString*) sha256 {
        const char * pointer = [self UTF8String];
        unsigned char result[CC_SHA256_DIGEST_LENGTH];
        CC_SHA256(pointer, (CC_LONG)strlen(pointer), result);
    
        NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
        for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
        {
            [ret appendFormat:@"%02x",result[i]];
        }
        return ret;
    }
    
    -(NSString*)sha256{
    常量字符*指针=[self UTF8String];
    无符号字符结果[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(指针,(CC_LONG)strlen(指针),结果);
    NSMutableString*ret=[NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
    
    对于(int i=0;i
    (CC_LONG)strlen(str)
    您使用的是什么类型的编译器/工具链和设置?这似乎有点太迂腐了。顺便问一下,为什么要将其标记为osx或自动引用计数…这两种方法中的任何一种都是零。@mah就像iOS编程问题标记为
    xcode
    -为什么?如果我们ed Eclipse?不管怎样…这确实是一个警告…警告你理论上的大小可能比CC___________________________________okay@Daij-Djan Yep,我发现如果字符串长度超过4GB(在OS X上
    int
    为4字节宽),则不太可能或可能出错。这只是一个警告,但我的应用程序每次运行时都会在这条线上出现故障。事实上,我已经修复了它,虽然它在这条线上出现故障,但原因不同。然而,这个答案仍然回答了原来的问题。摆脱了警告:感谢快速解决方案。它对我很有效。Thnk u很
    - (NSString*) sha256 {
        const char * pointer = [self UTF8String];
        unsigned char result[CC_SHA256_DIGEST_LENGTH];
        CC_SHA256(pointer, (CC_LONG)strlen(pointer), result);
    
        NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
        for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
        {
            [ret appendFormat:@"%02x",result[i]];
        }
        return ret;
    }