byte配列をintに変換する方法
- C#を使用して、byte配列の途中から2個ずつintに移す方法を教えてください。
- データの取得対象はヘッダとサブヘッダ以降で、値は2バイトずつです。
- より簡潔な方法があれば教えてください。
- ベストアンサー
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#なら簡潔な書き方ってあるのでしょうか?
- Passerby01
- お礼率46% (102/218)
- C・C++・C#
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
recvData[5]のアドレスを使って、unsigned short型ポインタ使えばいいのでは?
その他の回答 (1)
- aurumnet
- ベストアンサー率43% (51/117)
ビルドするときはunsafeオプションをつけて byte[] test = { 2, 3, 4, 5,6, 1, 0, 2, 0, 255, 255, 5 }; int x; unsafe { for(int i=0;i<3;i++){ int* xp=&x; byte* p = (byte*)xp; *p = test[5 + i * 2]; ++p; *p = test[5 + i * 2+1]; Console.WriteLine("{0}", x); } } Console.ReadLine();
関連するQ&A
- int型の内容をbyteの配列にコピー
int型の内容をbyteの配列にコピーする方法を教えて下さい。 int i_value = 500; byte[] by_value; by_value = new byte[4]; // どのような処理が必要ですか? by_value[0]には、0x1 by_value[1]には、0xf4 と格納したいです。 数字→文字列→文字(byte)できたのですが…。 C言語の場合、memcpy関数で型が異なってもキャストすれば回避できました。 JAVAでの方法を教えて下さい。
- ベストアンサー
- 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
- 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# 配列の配列(多次元配列?)
C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定 テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する A=1,2,3・・・ B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) { string strBuffer; //「=」前の値格納用変数 string[] strBuffer2; //「=」後の値格納用配列 listtmp=null; //strtmpに「=」前の値を格納 strtmp = TextLine.Split('=').GetValue(0).ToString(); //strtmp2に「=」後の値を格納(配列) strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(','); for (int i = 0; i <= strtmp2.Length - 1; i ++) { //[i,0]に、「=」前の値を代入 if (i == 0) { listtmp.Add(strtmp); } else { listtmp.Add(strtmp2[i].ToString()); } } //list配列にlistTmp配列を格納(配列の配列) list.Add(listtmp); intT = intT + strtmp2.Length; //行数カウント intTLine = intTLine + 1; } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
- byteをDBに格納
sqlserver 2008 framework3.5 SP1 C# すみません。 C#初心者です。上の情報で十分ですか? いま、データをDBに格納したく奮闘しております。 まず、格納したいものは、以下のような16進数のデータです。 「1E0015・・・」 いまはbool配列に{0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1・・・}のデータを8個ずつ int配列に{30, 0, 5,・・・}と変換して byte配列に{1E,0,15・・・}と変換しています。 bool配列からbyte配列に変換する方法はありますでしょうか? また、byte配列のDBへの格納方法も合わせてお教えいただけると助かります。 よろしくおねがいします。
- 締切済み
- C・C++・C#
- [VB.net] StringからByte配列への変換
皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- iアプリでバイナリデータを16進数に変換する方法がわかりません。
01234 56789 abcde こちらのデータを一旦、バイナリデータに圧縮して、 携帯端末でint型に変換する方法がわかりません。 10進数では上手くいきましたが、16進数では上手くいきません。 byte[] dbuf // 取得したデータ byte[] dttip = new byte[1]; int data = 0, pos = 0; for(int j = 0;j < 5;j++){ // 文字を配列に格納 for(int i = 0; i < 3;i++){ // ここでデータを1バイトずつ取得 dttip[0] = dbuf[pos]; data = byteChangeint(dttip[0]); if(data >= 48){ // ここでデータを取得 } else{ i--; } pos++; } public int byteChangeint(byte[] b){ int res = 0; res |= (int)(b[0]) & 0x000000FF; return res; } 16進数のデータを取得しようとした後、データの展開が上手くいきません。 よろしくお願いします。
- 締切済み
- Java
- javaのbyte配列へintなどを埋め込む方法
javaのbyte配列へintなどを埋め込む方法 java初心者です。データ編集がわからなくて悩んでいます。 下記のコードは"棒読みちゃん"といソフトへのTCPパケットを作成するコードです。 char buf[15]; *((short*)&buf[0]) = 0x0001; *((short*)&buf[2]) = speed; *((short*)&buf[4]) = tone; *((short*)&buf[6]) = volume; *((short*)&buf[8]) = voice; *((char* )&buf[10]) = 2; *((long* )&buf[11]) = len; 同じことをJAVAでしたいのですがわかりません。 (バイト型配列へint,long型を簡単に埋め込む方法がわかりません) よろしくお願いします。 よかったら、こちらもお願いします memcpy(&buf[15],message,strlen(messege)); TCPパケットのようなデータ処理が頻繁にある場合、 このようなコードは、どうしたらいいでしょうか? *((unsigned char* )&buf[15]) = message; CとJAVAになってますが、このような処理を簡単に書けないでしょうか?
- ベストアンサー
- Java
- BYTEの配列の扱いについて
すみません、BYTEを初めて利用している者なのですが、 文字列の描画で BYTE* ptr = new BYTE[20480]; と宣言した中に、 GetGlyphOutline() で取得した文字の画像を、1文字ずつ &ptr[0] &ptr[2000] &ptr[4000] &ptr[6000] ・・・ と2000毎に文字を入れ、書き出す時もそうしているのですが、 1文字目はキレイに描画できるのですが、2文字目以降が崩れてしまいます。 変なループが起きたり、文字毎に下に隙間が等倍で増えていく感じです。 これはBYTEの使い方を誤っていて、無理な使い方をしているのでしょうか? また、以前の質問でバイトも配列?が使えると聞いたのですが、 BYTE* ptr = new BYTE[1048 * 10]; これは BYTE* ptr = new BYTE[10480]; これと全く同じ物という意味なのでしょうか?
- ベストアンサー
- C・C++・C#
補足
すみません。丸1日かかり、自己解決しました。 BitConverter.ToUInt16(recvData,i*2)