• ベストアンサー

Byteについて

おはようございます。お世話になっています。 基本データ型の値をコンストラクタによってカプセル化する際に、intであれば値をそのまま、longであればLをサフィックスとして付けて記述するのですが、byteはどのようにすれば良いのでしょうか?色々試した結果、キャスト演算子を使って(byte)12のようにするとbyte型として認識してくれました。これ以外に何か数値をbyte型にする方法は有るのでしょうか?よろしくお願いします。

  • aleck
  • お礼率85% (40/47)
  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

ソースで byte 値をどう表すかということですか? 普通は int 値リテラルを書いて byte にキャストします。 byte b = (byte) 123; 他の方法は……ないでしょうね。

aleck
質問者

お礼

回答ありがとうございます。 やはりキャストするしかないようですね。ありがとうございました。

関連するQ&A

  • byte[2] から int へ。

    それぞれ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 としたいのですが、場合わけをせずに求める よい方法はないでしょうか。

    • ベストアンサー
    • Java
  • C# int→byte のキャスト

    プログラミング初心者です。 int型の変数に255以上の値を代入し、byte型の変数にcastするとbyte型の変数に代入される値はint変数の値から256を引いた値になります。なぜですか、またどういう仕組みでcastは行われるんですか?

  • C#のキャストについて(object→byte)

    いつもお世話になっております。C#初心者です。 「メソッドの引数として渡された値をリスト型の配列に格納する」という課題に取り組んでいますが、 変数のキャストで実行時にエラーが発生し、頭を悩ませています。 作成したコードは以下のようになっています。 public class TestClass {  private List<byte> hogeList = new List<byte>();  public void TestMethod( object hoge )  {   hogeList.Add( (byte)hoge ); ← (*)  } } 上記のメソッドをMain関数から TestClass test = new TestClass(); test.TestMethod(5); として実行すると、「hogeList」に「5」が格納される、といった動作にしたいと考えています。 しかしながら、ビルドは通るのですが、実行すると(*)の位置で止まり、 「指定されたキャストは有効ではありません。」 というメッセージが表示されます。 そこで質問なのですが、object型からbyte型にキャストする場合にはどのような記述の仕方がありますでしょうか? ご教授よろしくお願いいたします。

  • 文字を整数として扱う場合の演算について質問

    javaの参考書に、文字を整数として扱う場合の演算についての解説があり、疑問点があったので質問します。 質問1:何故char型の変数は、キャストしなくてもint型のリテラルを代入することができるのか?      例えば、 以下の演算はキャストしなくてもこのまま代入できます。 char ch='a'; ch=98; でも、以下の演算はキャストしていないのでエラーになります。      char ch='a'; ch=ch+1; これは何故ですか?参考書に記載されていた理由として、「byte,char,short、 これ等の型の変数や値を使って計算すると、それ等は一度intに直して計算されるから」というような趣旨の事が書いてありました。 つまり、char型の変数には、キャストしない限りint型の数値を代入できないということですよね? でも前者のソースコードは、chはchar型であるにもかかわらず、int型のリテラル98を代入できています。 これは何故ですか? 質問2:javaの参考書に、インクリメント・デクリメント演算子と複合代入演算子は、型を保存するという解説がありました。これはどういう意味ですか? 僕の仮説では、例えば、      char ch='a';      ch+=5; であれば、5は、char型のまま代入されるということでしょうか?

    • ベストアンサー
    • Java
  • Java intの扱い

    こんにちは、Javaを勉強しているものです。 小さなデータ(byteなど)をより大きないれもの(intなど)に入れるときには、暗黙的なキャストがおこなわれます。 逆に、大きな値を小さないれものに入れるための変換を「縮小変換」と呼び、これには明示的なキャストが必要だと習いました。 そこで、次のようなコードがあった場合、これは明示的なキャストが必要なのではないのでしょうか? byte b = 3; これは、コンパイルエラーにはならないのですが、 3はint型であり、bはbyte型なので、大きな値を小さな小さないれものに入れているということになります。本来であれば byte b = (byte)3; と書くべきではないのでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • byte型のマイナスの扱いについて

    COMポートを使用して通信をしようとしています。 制御コマンドを1byte区切りで送信するのですが、byte型で扱う際、-128~-1の扱いが思うようにいきません。 ウェブを検索して符号拡張など検討してみたのですが解決できませんでした。 いろいろやってみましたが、基本的には byte[] byteArray = {0x12,0x20,-0x80}; String str = new String(byteArray,0); BufferedWriter bw; bw.write(str); このようになっています。 0x12や0x20の送信は、信号を調べる機器にて正しく送信されていることが確認できたのですが、-0x80は予期せぬ値になってしまいます。 -0x80では、16進でC0,3Fなどになってしまいます。 二進で先頭に1がたっていることが原因なのでしょうか。。。 int型にしたり、byte型そのままで送ったり、0x40から左にビットシフトして(&ffも忘れずに)代入したりもしたのですが、結果は同じでした。 ご教授宜しくお願いします!

    • ベストアンサー
    • Java
  • byte配列→float型の値を読みlongに変換

    UTF-8 encodingで書かれたテキスト分とfloat型 (IEEE-754/octet-stream)で書かれたバイナリ分混ざったファイルがあります。そのファイルをdataInputStreamを使って読んで、byte配列に保存されています。 FileInputStream fis = new FileInputStream(ファイル); DataInputStream dis = new DataInputStream(fis); byte[] bs = new byte[適切なサイズ]; //読み込み dis.read(bs); byte配列「bs」のindex 0 から 5までテキスト情報(XML式のヘッダー情報)あると仮定します。 UTF-8の分は for loop で "new String(bs, loop index, 1, "ASCII")"すると読み取れます。 問題は以下: index 6 から 17まではfloat型のバイナリデータ保存されているとします。 たとえば、index 6 から 順番に以下のHex string があります。 01 2A 5F 4E   B4 F2 45 4E   92 6A 5F 4E (4つのグループにしたのは分かりやすくするため) 上記float型のHex String をlong intに変換して、別途用意された配列に保存したい。 ネット検索でByteBufferにwrapメソッドを使って、getFloat(index) 又は getFloat()でfloat型取得できると書いていますがその先はどうやってlong int変換できるのでしょうか? 上記のHex string の変換後の値(取扱いしたい値)は19554126, 3035776334, 2456444750です。 今までのコード: long [] data = new long [既知のサイズ]; ByteBuffer b = ByteBuffer.wrap(bs).order(ByteOrder.LITTLE_ENDIAN); //なんらかのloop 又は ByteBuffer b の最後まで読める仕組み(remainingというメソッド?){ Float f = b.getFloat(); 又は Float f = b.getFloat(loop index); data[index] = fの longに変換した値 // つまり 19554126, 3035776334 .... } ネットで探していますが、やり方まだわからない。 どなたか、教えてください。 よろしくお願いします。

  • C言語の定数のサフィックスについて

    C言語に詳しい方はおバカな質問をしていると思われるかもしれませんが、当方はソフトは初心者なのでご容赦ください。 C言語で定数を扱う際に一定以上のサイズの定数の場合L、UL等のサフィックスを付けないと正常に処理されない(例:0x0123456789ABCDEFという定数はサフィックス無しだと0x89ABCDEFとして処理される)仕様になっている事は把握しているのですが、この一定サイズについてご教授願います。 int、long等は処理系によってサイズが何bitになるかが変わりますが、intが16bitの場合は32bitの定数でもサフィックスにL、UL等を付けなければいけないのでしょうか? それともintのサイズに関係なく32bit以下ならサフィックスは不要で、32bitを超える場合はサフィックスが必要になるのでしょうか? また、処理系に依存せず一定のサイズの変数を宣言するのにint32_t、int64_t等がありますが、サフィックスにも同様に処理系に依存せずサイズを明確にする物はあるのでしょうか? 例えば0x0123456789ABCDEFULLとした場合、long longが32bitの場合は32bitの定数として扱われてしまうと思うのですが、定数を処理系に依存せずに確実に64bitとして処理してほしい場合はどの様にすれば良いのでしょうか? (あるサイトに"GCCではlong longが64bitのサイズになるが言語仕様上はビット長は保証されていない"と言う記載があった事から、サフィクスにLLやULLを使用しても64bitで処理される保証が無いと思い、この質問をさせて頂いています。)

  • long型に値を代入したい。

    long型に値を入れる時は、 long id = 100L; とすると思うのですが、例えば int old_id = 100; long new_id = old_id*100; というように、あらかじめint型に入っている値に計算結果を入れて、long型の変数に値を入れたいのですが、このとき「L」はどのようにつければいいのでしょうか? long new_id = old_id*100+L; かなと思い、やってみたのですが、エラーが出てしまいます。

    • ベストアンサー
    • Java
  • C# コンストラクタ オーバーロード

    今C#を勉強しているのですが、よくコンストラクタがわかりません。初期化をする、というのは理解できるのですが、オーバーロードの際、 int get; string get2;    Person(int a )   { get=a; get2="ああ" } Person(int b,string a)   { get=b; get2=a } show() { Console.WriteLine("{0}{1}"get,get2); } メインメソッド Person p1 = new Person( 1); Person p2 = new Person(2,"あ"); p1.show(); p2.show(); こうすると出力結果が 1ああ 2あ になるはずですが、(わかりずらいですが、)自分の中ではnew演算子が呼ばれたときにが呼ばれて、変数に値が入ります。そして次のnew演算子でが呼ばれて値が上書きされるので2あ 2あ になると思うのですが。それともp1.show();の時点でもう一回コンストラクタが呼ばれているのでしょうか。要は上書きされるのか、showの時にコンストラクタが呼ばれ、その値で出力されるのか、です。

専門家に質問してみよう