2016-10-10 20 views
-2

我宁愿拖动此警告,而不是搞砸部署错误的转换。 在这一行XCode8(Swift3,iOS10).c文件:解决隐式转换在IOS中丢失整数精度目标警告

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并取出该警告的最佳方式?

+0

,除非你知道所有的含义,我接受他们不要使用强制类型转换!说:SHA1Update的签名是什么? – Olaf

+0

什么是Swift 3 .c文件? Swift和C是不同的语言。 –

+0

显然是的。但是,根据项目的Swift设置,即使XCode中包含Objective C或C代码,XCode的投诉方式也不相同。我正在迁移你会意识到这一点。 @MartinR – Josh

回答

0

如果变量名是什么去了,那是误投:

SHA1Update(&theSHA1Context, inText, inTextLength); 
+0

嗨,声明更新以上... – Josh

+0

@Josh好的,我认为你可以逃脱没有演员。 – Droppy

+1

如果你无法摆脱避免警告的转换,它看起来像你需要使用'(unsigned int)inTextLength'。 –

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); 
    
0

试图建议后,这改变满足了编译器,和OAuth继续正常工作:

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

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