2017-09-13 1 views
0

16進データをsigned int/decimalに変換しようとしていますが、何が間違っているのか分かりません。バイナリをsigned int/decimalに変換する

-2にするにはFEが必要です。

私はConvert.ToInt32(fields[10], 16)を使用していますが、-2の代わりに254を取得しています。

ご協力いただければ幸いです。

+1

あなたの代わりに '254'とどのようにyのことを知っているのを説明できます'254'の代わりに' -2'を得る必要がありますか? –

+0

私が働いている人は、署名された価値を見たいと思っています。理由は分かりませんが、それは要求されたものです。しかしそれは可能です。このリンクはJavaScriptで行います。 http://www.free-test-online.com/binary/signed_converter.html – StarScr3am77

+0

これは符号付きint小数点ではありません。そのようにしたい場合は、符号付きバイトです。 –

答えて

4

intは32ビット幅なので、0xFEのは実際intの空間254に等しい、Convert.ToInt32(string, int)の目的のため0x000000FEとして解釈されます。

符号付きバイト範囲の値で作業したいので、代わりにConvert.ToSByte(string, int)を使用してください(byteはデフォルトでは符号なしなので、代わりにsbyteタイプが必要です)。

Convert.ToSByte("FE",16)

+0

完璧!どうもありがとうございます!!! – StarScr3am77

2

は符号付きバイトとして値を解釈:

sbyte value = Convert.ToSByte("FE", 16); //-2 
0

まあInt32の境界がある-2あなたは128の上にラップアラウンドを行いたい場合には147 483 648 147 483 647 2にそうFEマッチ254

、最もエレガントな解決策は、符号付きバイト(sbyte)を使用にproablyです:あなたが ``に-2` FE`をオンにしたい理由

csharp> Convert.ToSByte("FE",16); 
-2 
関連する問題