2016-10-10 5 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

明らかにはい。しかし、XcodeはObjective CやCコードを持っていても、プロジェクトのSwift設定に応じて違う方法で文句を言います。私はあなたがそれを知っているであろう移住していました。 @MartinR – Josh

答えて

0

変数名で行くために何かしている場合、それはミスキャストだった:

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

こんにちは、宣言は上に更新されました... – Josh

+0

@Josh大丈夫です。 – Droppy

+1

警告を避けるためにキャストを取り除くことができない場合は、 '(unsigned int)inTextLength'を使う必要があるようです。 –

0

2の問題

  1. は、長さフィールドはsize_tよりも狭くなっている、unsignedことが期待されますあなたのプラットフォーム上で - したがって、警告。値を絞り込むには、警告をキャストして静かにします。しかし、ターゲットが表現できない場合、キャスティングは致命的な問題を引き起こす可能性があります。テストの使用を提案する。

    //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); 
関連する問題