1

私は C# コーディングが初めてで、最近問題に対処したので、あなたの助けを求めたいと思います。以下のリンクからこのコードを入手しました。

http://pastebin.com/5jQe5tQs

私の問題はフィニッシュラインにあります:

uint num = ((string_0[0] | (string_0[1] << 8)) |
            (string_0[2] << 0x10)) | (string_0[3] << 0x18);

このエラーが発生した場所:

タイプ 'int' を 'uint' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

私が知っていることと読んだことから、問題は int に割り当てられた値が int 値には大きすぎることが原因であることがわかりました。しかし、私の小さな経験から、どの変数の値が正しい形式になっていないのかわかりません。より助言された専門家がコードを修正するのを手伝ってくれますか?

4

1 に答える 1

3

式の結果

((string_0[0] | (string_0[1] << 8)) | (string_0[2] << 0x10)) | (string_0[3] << 0x18)

ですint。あなたはそれをに入れていuintます。numを作成するintか、式を にキャストするだけuintです。

[]演算子を使用して文字列の一部を逆参照すると、 char. のシフト演算子がchar 存在しないため、値は暗黙的に にアップグレードされますint(精度が失われるリスクがないため、アップグレードは問題ありません)。したがって、この部分(他の部分も同様):

(string_0[1] << 8)

を返しますint

于 2013-07-15T07:44:31.430 に答える