![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
それぞれintの下位2バイトのビット列保持するbyte型配列の要素2つを int 形の整数に治したいのですがいい方法が思いつきません。例えば、
byte[0] = 0x01;
byte[1] = 0x01;
ならば、
00000000 00000000 00000001 00000001
で、256 + 1 = 257
byte[0] = 0x02;
byte[1] = 0x10;
ならば、
00000000 00000000 00000010 0000011
で、512+3 = 515
です。byteの値が0~127の場合は
int n = byte[0] << 8
n = n | byte[1]
という感じでいけそうなのですが、byte[0]が 0xFF のような負の値のときにint とのビット演算(もしくはシフト演算)で上位2バイト分も補数表記のためか全部1で埋まってしまい、上の方法はだめみたいです。
byte[0] = 0x01;
byte[1] = 0xFF;
のときは、
00000000 00000000 00000001 11111111
で、256+255 = 511
としたいのですが、場合わけをせずに求める
よい方法はないでしょうか。
No.4ベストアンサー
- 回答日時:
サンプルも作ってみました。
--------------------------
public class Sample {
public static void main(String[] args) {
byte [] bytes = { (byte)0x0FF, 0x01 };
int b4 = 0;
for(byte b : bytes){
int i = 0x0FF & b;
b4 = (b4<<8) + i;
}
System.out.printf("%1$d:%1$X%n",b4);
}
}
ソースまで下さってありがとうございますm(_ _;)m
#4さんにはperlの方の質問でも過去に何度かお世話に
なっているので、感謝感謝です。
またよろしくお願いします。
No.3
- 回答日時:
こんにちは。
。>反転してしまうとは、例えば byte[0] = 11111111 (ビット) の場合,
>int とのビット演算の際のbyteをintに変換したビット列は
>00000000 00000000 00000000 11111111
>となってほしかったのですが,
>11111111 11111111 11111111 11111111
>となってしまいます。
00000000 00000000 11111111 00000000
となってほしかったのですが、
11111111 11111111 11111111 00000000
となってしまいます。
でしょうか?
byte[0]が最下位バイトなのか、下位2番目のバイトなのか不明ですが、
byteをintにキャストするときに、
& (int)255、もしくは & (int)65535
をつけてはいかがでしょうか?
11111111 11111111 11111111 0000000
&
00000000 00000000 11111111 1111111
=
00000000 00000000 11111111 0000000
的外れだったらすみません。
参考URL:http://stoc.as.wakwak.ne.jp/java/bit_shift_opera …
>00000000 00000000 11111111 00000000
>となってほしかったのですが、
>11111111 11111111 11111111 00000000
>となってしまいます。
>でしょうか
おっしゃるとおりです^^;
ご迷惑おかけします。
こちらの方法も#2 さんと同じでマスクするということですよね。
Cのようにunsigned が使えると便利だなぁと思う今日この頃です。
ありがとうございました。
No.1
- 回答日時:
通りすがりの主婦です。
すごく勘違いしていたらすみません。なぜ補数で反転してしまうのかが良く分からないのですが、2進数から直接10進数でなく、16進のhex関数とかでクッションを置くのはダメですか?あと、
>00000000 00000000 00000010 0000011 ←これ
>で、512+3 = 515
>です。
誤:00000000 00000000 00000010 0000011
正:00000000 00000000 00000010 00000011
でいいですか?
ならば、できそうなんですが・・。そんな問題ではない!だったらごめんなさい。(>_<)
この回答への補足
答え忘れてしまいました m(_ _;)m
誤:00000000 00000000 00000010 0000011
正:00000000 00000000 00000010 00000011
おっしゃるとおりです。0の数を間違っていました・・
今思うと、byte[0] = 0xFF という表記はちょっとおかしいですね。
ごめんなさい。
byte[0]
= 0xFF(符号なしとしてみたときの値 10進なら 255 )
= 11111111(ビット表記)
= -1 (実際の数値) と思ってください.
反転してしまうとは、例えば byte[0] = 11111111 (ビット) の場合,
int とのビット演算の際のbyteをintに変換したビット列は
00000000 00000000 00000000 11111111
となってほしかったのですが,
11111111 11111111 11111111 11111111
となってしまいます。byte[0] = 11111111(ビット) = -1 なので当然といえば当然なのですが・・
ごめんなさ、hex 関数とはどのクラスにあるのでしょうか.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- その他(データベース) c言語の問題です。これを踏まえてコーディングしたいのでおしえていただきたいです。 3 2023/08/03 09:27
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++からC#のdllを参照する際、...
-
「配列定数は、イニシャライザ...
-
【C#】クラスのメンバ変数のア...
-
C#で「型または名前空間名 'int...
-
再帰・組み合わせ
-
メンバ関数のconst
-
javaのプログラムで、forの文が...
-
javaでべき乗余
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
javaについての質問です
-
(Swing)JTextFieldを半角のみ入...
-
intが負の時に投げる例外はあり...
-
アンマネージDLLで、ダイアログ...
-
6桁の数字を重複なしでランダム...
-
classを使って座標軸を求めるコ...
-
javaでcsvファイル読込時の改行...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
式の型は配列型で int に解決済...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
式の型は配列型で int に解決済...
-
「配列定数は、イニシャライザ...
-
intが負の時に投げる例外はあり...
-
javaでカレンダー作成
-
メインが含まれていません
-
JAVA エラー 式の開始が不正で...
-
Javaで電卓を作りたい
-
javaでcsvファイル読込時の改行...
-
(Swing)JTextFieldを半角のみ入...
-
javaのエラーの意味がわかりま...
-
「WorkImage.getGraphics()」が...
-
初心者ですが、今javaで簡単な...
-
sin曲線とcos曲線を描くプログ...
-
java spring でエラーが出て困...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
DataSet(DataTable)の使い方
-
JAVAでCの関数ポインタのような...
-
6桁の数字を重複なしでランダム...
-
JAVA EOFの検出 (条件文で「...
おすすめ情報