• 締切済み

長さ3のバイト配列

長さ3のバイト配列 0~16777215の範囲の数値がありまして byte[ ] byteArrayA =BitConverter.GetBytes(0x00); byte[ ] byteArrayB =BitConverter.GetBytes(0xffffff); で、 00-00-00 FF-FF-FF と、長さ3固定のバイト配列を返して欲しい場合はどうすればいいのでしょう? そのまんまだとINT16かINT32かで配列の個数が違ってきますよね。 INT32型でだと4個の配列になっちゃいますが、3個でいいんです。 どうしましょう?

みんなの回答

回答No.2

#include <stdio.h> int main(void) { int b = 0x12345678; b &= 0x00ffffff; //上位バイトを削除 printf("%#x\n",b); return 0; }

Passerby01
質問者

補足

0~16777215の範囲の数値がありまして 0x12345678という範囲外の数字はありません それと、00-34-56-78という結果が欲しいのではありません。 34-56-78という長さ3のものが欲しいのです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ぱっと思い付いた方法: 1. とりあえず INT32 で変換しておいて不要な部分を捨てる. 2. 自分で作る.

Passerby01
質問者

補足

とりあえず2で考えてみました。 int num=123; (byte)(num & 0x0000ff)); (byte)((num & 0x00ff00) >> 8)); (byte)((num & 0xff0000) >> 16)); 1.不要な部分を捨てる の方は未だどうすりゃいいのか解らずです。 他にも方法ありましたら、引き続き解答お待ちしています。

関連するQ&A

  • byte配列の途中から2個ずつintに移すには?

    byte配列の途中から2個ずつintに移すには? Byte[] recvData={02:03:04:05:06:01:00:02:00:FF:FF:05} int nCount; =3;//データn個ください。 List<int> ValueList = new List<int>();//格納用 for (int i = 0; i < nCount; i++) {   //[0]~[4]までヘッダ+サブヘッダ。データは[5]から2byteずつ ValueList.Add(recvData[5 + i * 2] | (recvData[6 + i * 2] << 3)); }; という感じで、溜まったbyte配列の受信データから 0001、0002、65535とデータ部分を2byteずつ取り出したいのですが もうちょっとC#なら簡潔な書き方ってあるのでしょうか?

  • バイト配列

    以下のようにバイト配列を確保した場合 byte buffer1[] = new byte[2]; byte buffer2[] = new byte[2]; byte buffer3[] = new byte[4]; buffer1[0] = 1; buffer1[1] = 2; buffer2[0] = 3; buffer2[1] = 4; C言語でいうところのmemcpy(buffer3,buffer1,2);memcpy(buffer3 + 2,buffer2,2);のように buffer1とbuffer2を連結したbuffer3を作成したいのですが、どうするのが良いでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • 数値からバイト配列への変換について

    すみません。JAVA初心者で困ってます。 double型の数値からバイト配列に変換するにはどうしたらよいですか。 ちなみにJAVAのAPIを見ながら考えていますが、 public class Double2Byte { private double m_double; private byte m_byte; private String strByte; private byte[] m_byteArray; public Double2Byte(double a_double) { m_double = a_double; } public void double2Byte(){ m_byte = (byte) m_double; } public void changeByte(){ strByte = Double.toString(m_double); } public void getByte(){ m_byteArray = strByte.getBytes(); } public static void main(String args[]){ Double2Byte d2b = new Double2Byte(1.23456789); d2b.double2Byte(); d2b.changeByte(); d2b.getByte(); System.out.println(d2b.m_byteArray); } } こんな感じになるのかなと考えています。 ご指導のほど、お願いいたします。

  • 文字のバイトサイズの取得

    25バイト以上ある文字配列を25バイトまでに切り取りたいのです。 全て半角英数ならstr.substring(0 ,25)ですみますが 日本語も入っているのでsubstringが使えません。 そこで,バイト配列を使おうと思ったのですがうまくいきません。どうかお願いします。 例) String E = "AAAAAAAAAAAAAあああああああ"; byte S[] = new byte[100]; S=E.getBytes(); ByteArrayOutputStream out = new ByteArrayOutputStream(); for(int n = 0; n < 25 ; ++n){ out.write(S[n]); } System.out.println(out.toByteArray()); 結果として"AAAAAAAAAAAAAあああ"が出力されてほしい

    • ベストアンサー
    • Java
  • 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
  • int配列をbyte配列に変換

    MIDPアプリを作成している初心者です。 Image データを一旦端末のレコードストアに保存しておく為、 getRGB()で取得したint配列を、byte配列に変換しなくてはいけません。 ↓のように レコードストアに書き込むメソッドを書いてみました。 public void writeRecordStore( String name, Image image ) {     int width = image.getWidth();     int height = image.getHeight();     int[] pxData = new int[ width*height ];     byte[] byteData;     RecordStore rs = null;     try {         //画像をバイトデータに変換         image.getRGB( pxData, 0, width, 0, 0, width, height );         //レコードストアを開く         rs = RecordStore.openRecordStore( name, true );         //バイト配列に変換 ← ここがわからない                  //レコードの追加         rs.addRecord( byteData, 0, byteData.length );              } catch( Exception e ) {     } } int配列をbyte配列に変換する方法わかる方 ご教授の程お願いします。 また、まだコーディングに自信が無いので、文法のミスもご指摘頂けたらありがたいです。

    • ベストアンサー
    • Java
  • 0バイト文字の送信

    C#ですが、C/C++でも同じだと思うので、 お願いします。 たとえば、"abcde"という文字を、終端文字0バイト として、送信したいのですが、どうしたらいいので しょうか。 string mys="abcde"; byte[] mybyte=new byte[1024]; mybyte=Encoding.UNICODE.GetBytes(mys); mynetwork.Write(mybyte,0,mybyte.Length); こんな感じで、書き出すつもりですが、終端が、 0バイトには、なっていないようです。 (ちなみに、JAVAだと、文字列を、送るので "abcde\0"で、うまくいきます。バイト配列で 送る場合が、わかりません。 分かる人がいましたら、お願いします

  • キャラクタ?バイト?

    下記プログラムを作成しましたが、 b1,b2の配列結果が等しくなりません。 b1の結果はキャラクタデータ(文字)のようですが、 b2の結果はバイトデータのようです。 原因は何故なのでしょうか??? b1は、String型をbyteデータに変換してbyte配列へ b2は、直接byteデータをbyte配列へ import java.io.*; public class Sample { private static final String FILE_NAME = "Output01.txt"; public static void main(String[] args) { // FileOutputStreamクラス宣言 FileOutputStream fos = null; try { fos = new FileOutputStream(FILE_NAME); byte[] b1 = "AB".getBytes(); for (int i = 0; i < b1.length; i++) { fos.write(b1[i]); } byte [] b2 = {(byte)A, (byte)B}; for (int i = 0; i < b2.length; i ++){ fos.write(b2[i]); } } catch (Exception e) { System.out.println("Exception : " + e); } finally { try { fos.close(); } catch (Exception et) { } } } }

    • ベストアンサー
    • Java
  • enumに数字と配列

    C#で数値で、配列の列挙はできないでしょうか。 やりたいイメージは以下です。 public enum abc : byte[] { 1 = {0x30, 0x31}, 2 = {0x32, 0x33}, 3 = {0x34, 0x35}, } public enum abc : byte[] { A = {0x30, 0x31}, B = {0x32, 0x33}, C = {0x34, 0x35}, } いろいろ試しましたが、できませんでした。お願いします。

  • メモリ上に配置されていないバイト配列を代入

    memcpyでメモリ上に配置されていないバイト配列を代入する方法を教えて下さい。 #include<iostream.h> int main() { char str[3]; memcpy(str,"aa",3); printf("%s",str); return 0; } これは分かるんですが、バイト配列では"aa"のところに何を書けばいいんですか? memcpy(str, (char *){0x61,0x61,0x0}, 3);ではコンパイルできませんでした。 str[0]=0x61;のように1つずつなら代入できるんですが、配列ごとの方法が分かりません。

専門家に質問してみよう