C 解决iOS中的隐式转换丢失整数精度目标警告

C 解决iOS中的隐式转换丢失整数精度目标警告,c,ios10,xcode8,implicit-conversion,C,Ios10,Xcode8,Implicit Conversion,我宁愿拖拽这个警告,也不愿搞砸部署错误的转换。 在这一行中,XCode8 Swift3,iOS10.c文件: SHA1Update(&theSHA1Context, (size_t)inText, inTextLength); //void SHA1Update(SHA1_CTX* context, u_int8_t* data, unsigned int len) 我收到了这个警告 "Implicit conversion loses integer precision: 'size

我宁愿拖拽这个警告,也不愿搞砸部署错误的转换。 在这一行中,XCode8 Swift3,iOS10.c文件:

SHA1Update(&theSHA1Context, (size_t)inText, inTextLength);
//void SHA1Update(SHA1_CTX* context, u_int8_t* data, unsigned int len)
我收到了这个警告

"Implicit conversion loses integer precision: 'size_t' to 'u_int32_t' (aka 'unsigned_int')

我不是这方面的专家,所以我更愿意接受明智的建议,什么是满足XCode并消除警告的最佳方法?

如果变量名是可以参考的,那么这是错误的:

SHA1Update(&theSHA1Context, inText, inTextLength);
2个问题

长度字段应该是无符号的,它比平台上的size\u t窄-因此出现警告。要缩小值,请使用强制转换并使警告静音。但是,如果目标不具有代表性,铸造可能会导致灾难性的问题。建议使用测试

//void SHA1Update(SHA1_CTX* context, u_int8_t* data, unsigned int len)
//                                narrowing -----v
// SHA1Update(&theSHA1Context, (size_t)inText, inTextLength);

size_t inTextLength;
assert(inTextLength <= UINT_MAX);
SHA1Update(&theSHA1Context, (size_t)inText, (unsigned) inTextLength);

在尝试了这些建议之后,编译器对这些更改感到满意,OAuth继续正常工作:

    //old code:
    //SHA1Update(&theSHA1Context, (u_int8_t *)inText, inTextLength); 

    //new code:
    SHA1Update(&theSHA1Context, (unsigned char *)inText, (unsigned int)inTextLength); 

@Josh好的,我认为你完全可以不用强制转换。如果你不能不用强制转换来避免警告,看起来你需要使用unsigned intinTextLength。除非你知道所有含义并接受它们,否则不要使用强制转换!说:什么是SHA1Update的签名?什么是Swift 3.c文件?Swift和C是不同的语言。显然是的。然而,XCode根据项目的Swift设置以不同的方式进行投诉,即使其中包含目标C或C代码。我相信你在迁移,你会知道的@马丁纳
    //old code:
    //SHA1Update(&theSHA1Context, (u_int8_t *)inText, inTextLength); 

    //new code:
    SHA1Update(&theSHA1Context, (unsigned char *)inText, (unsigned int)inTextLength);