32279


お世話になっています。

[code]

    const int LENGTH_SIZE = 5;  
    byte[] Length = new byte[LENGTH_SIZE];
    Buffer.BlockCopy(byteData, nowPos, Length, 0, LENGTH_SIZE);
    int Size = Convert.ToInt32(BytesConvert.ToHexString(Length), 16);
    
[/code]

バイトを変換しようとした時に  
「UInt32 型の値が大きすぎるか、または小さすぎます。」  
Lengthの配列の中身は  
[250][51][137][241][32]となってます。  
サイズが大きいから落ちるのは納得できるのですが、回避方法が浮かびません。  
ご教授いただけると幸いです。


CC BY-SA 3.0
2017-01-31T08:10:47.383
32276
2017-01-31T08:55:39.663
2017-01-31T08:12:36.153
5044
19310
question
c#
convert.toint32について


すべてのバイトが0でないことから、`int`型に格納することは無理だと思います。`long`型への変更を検討してください。

この場合`Convert.Int64`を使用しますが、メッセージからすると`BytesConvert.ToHexString`の内部で例外が発生しているのではないかと思われます。このメソッドは.NET
Framework標準ではないのでそちらの実装を変更するか、`BytesConvert.ToHexString`を使用せずに自分で変換を行う必要があります。

一番素直に直接計算すると、以下のようになります。

[code]

    long Size = Length[0] * 0x100000000L
              + Length[1] * 0x1000000L
              + Length[2] * 0x10000L
              + Length[3] * 0x100L
              + Length[4];
    
[/code]

しかし添字の並びがこの順でよいかはデータの仕様によります。


CC BY-SA 3.0
2017-01-31T08:55:39.663
32279
2017-01-31T08:55:39.663
5750
32276
answer