- PR -

文字列を符号付きに変換して取得するには・・

投稿者投稿内容
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2009-03-31 09:49
お世話になります。
XP,VS2005のC#で開発をしております。

文字列"FF"
などを、符号付き整数に-128などに変換するような
メソッド、もしくは関数はありますでしょうか?
符号ビットが立っている場合は、マイナスに変換するような
ことは、可能でしょうか?

Convert.ToInt32

Int32.Parse
などでは、255が戻ってしまいます。
なにか良い方法はありませんでしょうか?

お願いいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-03-31 09:59
FF は 255 で合っていると思いますが
「-128など」とは何でしょうか?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2009-03-31 09:59
引用:

Convert.ToInt32


そこまで分かってるなら、Convert クラス内の他のメソッドにも目を向けましょう。
何ビットの数値として扱えばいいのか? を考えて。
Int32 は文字通り 32bit 数値ですから、一番上の 32 ビット目が補数用のビットですよ。0xff ごとき話になりません。


[追加]
あれ? 0xff で -128 ? それってどんな変換?
[/追加]

[ メッセージ編集済み 編集者: Hongliang 編集日時 2009-03-31 10:07 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2009-03-31 10:07
変換対象が 1バイト と決まっていれば、sbyteで取得するとか。

sbyte sb = Convert.ToSByte("FF", 16);

ところで FF って -128 ではないのでは?(0x80が-128)
→2の補数ってことではないのか?
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2009-03-31 10:12
引用:

kenさんの書き込み (2009-03-31 09:49) より:
文字列"FF"
などを、符号付き整数に-128などに変換するような



"FF"→-1
"80"→-128

なら以下でいけます。
SByte.Parse("FF", System.Globalization.NumberStyles.HexNumber)

"FF"→-128
となると用意されたメソッドで適合するのがあるかちょっとわかりません。
場合によっては自作ですかね。


ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2009-03-31 10:17
Kingさん
Hongliangさん
Blueさん
レスありがとうございます。

もうしわけありません。
-128ではなく
0xFF = -1です
ボケておりました。
2補数に変換を行いたいと思っています。

入ってくるデータが32bitではなく
24bitなので、なにかよい方法は
ありませんでしょうか?

プログラムでビットをみながら
作るしかありませんでしょうか?

お願いします。

Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2009-03-31 10:20
> 24bitなので、なにかよい方法は
ということはどのようになってほしいのでしょうか?

FF FF FF

だったら何にどう値が格納されるのでしょうか?
sbyte配列に {-1, -1, -1} ?
それとも、24ビット目を符号ビットとするの?
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2009-03-31 10:29
Blueさん
レスありがとうございます。

入ってくる値は、文字列で取得します。

0x800000 - 7FFFFF(hex) ← この文字列が送られてきます。
(-838608 - 838607)

仮に -128 だと
FFFF80の文字列が入ってきます。

ですので、24bit目が符号になります。

お願いします。

スキルアップ/キャリアアップ(JOB@IT)