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

时间:2016-10-10 12:27:33

标签: 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_t' to 'u_int32_t' (aka 'unsigned_int')

我不是这个领域的专家,所以我宁愿采取精明的建议,满足XCode并发出警告的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

如果变量名称是任何东西,那就错了:

points

答案 1 :(得分:0)

2个问题

  1. 长度字段应为unsigned,比平台上的size_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);
    
  2. 缓冲区inText的大小写肯定是错误的。删除它。

    SHA1Update(&theSHA1Context, inText, (unsigned) inTextLength);
    

答案 2 :(得分:0)

在尝试建议后,此更改使编译器满意,并且OAuth继续正常工作:

// List for filter.
RecyclerView filterList;