• 締切済み

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進数のデータを取得しようとした後、データの展開が上手くいきません。 よろしくお願いします。

  • d-mme
  • お礼率66% (4/6)
  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

ビット演算の所が何をしているのかよく分からないということもあり、恐る恐るアドバイス。 >10進数では上手くいきましたが、16進数では上手くいきません。 とあるので、上手くいった10進数の方に変換すればいいのではなかろうかと。 引数が2つあるInteger.parseIntメソッドを使用。 http://www.letsstudy.net/java/203/Notes.html 引数が2つあるInteger.toStringメソッドを使用。 http://always-pg.com/java/j2se_rd/number/integer_tostring.html

d-mme
質問者

お礼

ご返事、有難う御座います。 ビット演算の箇所は取得したバイナリデータを1Byteずつアスキーコードに変換している箇所です。 アスキーコードのa~fまでの値が0x3a~0x3fだと勘違いしていました。 実際にはa~fまでの値は0x61~0x66だったので、データの取得がうまくいきました。 お騒がせして、申し訳ありませんでした。

関連するQ&A

  • javaで16進数のバイナリデータ4バイトを10進数に変換する方法

    今私が行なおうとしていることは、char型とbin型が混ざり合ったファイル(1レコード301バイト)から固定バイト部分(bin型の部分4バイト分)を切り取り、 テキストファイルで読み取れる数値(int、又はbouble)に変換・出力するという作業です。 FileInputStreamとDataInputStream.read()を使用し、全データをbyte[]で取得、対象固定バイト部分のbyte[]取得までは出来ました。 取得したbyte[]の値を見ると、16進数表記になっていました。ここで、1バイト分(byte[1])をintValueでintに変換する事はできましたが、 4バイト分(byte[4])の値を一気に10進数表記にしてint型で出力する方法がわかりません。 誰かわかる方はいらっしゃいますか?そもそもできないのでしょうか? またはもっと良い方法があれば教えていただきたいです。 補足としてですが、BufferedReaderでファイルを読込まなかったのは、bin型データ部分がたまたま改行コードになってしまうことがあり、readLine()で1行データ(301バイト分)を取得できないからです。 こちらの方法でも読込み・変換できるのでしょうか? 誰かわかる方がいらっしゃったらぜひ教えて下さい!

    • ベストアンサー
    • Java
  • for文を使わずバイナリファイルから目的のデータを読む方法

    バイナリファイルを読み込んで、目的のデータまでfor文を使っているのですが、もっと効率良く目的のデータを読むことはできないのでしょうか? for (int a=0 ; a < 36 ; a++) { bytedata = (byte)fi.read(); } よろしくお願いします。

    • ベストアンサー
    • Java
  • 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#なら簡潔な書き方ってあるのでしょうか?

  • iアプリ:スクラッチパッド

    お世話になっております、dwtです。 テキストやWEB片手に独学でiアプリ開発をやっているのですが どうしても解決できない点があり質問させて頂きました。 現在、Eclipseを用いて開発していて エミュレータ上では意図する通り動くのですが 実機(SO506iC)では上手く動作しません。 動作させたい流れは以下となっております 初回起動かを確認 ↓ 特定のフラグが0なら初回読み込みと判定 WEBから画像をDLしスクラッチパッド2に保存 ↓ 読み込み済みフラグを書き込み ↓ その他の処理 という流れを行っているのですが 実機ではスクラッチパッドが書き込まれていないのか 常に初回起動扱いの動作をします。 読み込み部 //----------------------------------------- os_in = Connector.openInputStream("scratchpad:///0;pos=0"); byte_data = new byte[1]; int_size = (int)(os_in.read()&0xEF); byte_data = new byte[int_size]; os_in.read(byte_data); str_retdata = new String(byte_data , 0 , int_size ); WEBから画像を取得しスクラッチパッド2に画像を保存する処理 //------------------------------------ (コネクト部字数制限により略) OutputStream out = Connector.openOutputStream("scratchpad:///2;pos=0"); byte[] byte_buf = new byte[1000]; while(( int_size = in.read(byte_buf)) != -1) { out.write(byte_buf,0,int_size ); } また次の点も解決できずにいます。 ・gif画像を90kb程度のサイズにした場合、最初の画像表示部でエラー停止してしまう →画像サイズに制限? ・スクラッチパッド0のデータを読み込む際 最後まで読み込めず途中で途切れてしまう。 スクラッチパッド0のデータを途切れる事なくSTRING型に格納する良い方法は…? 何かご存知の方がいらっしゃいましたらお願いします。

    • ベストアンサー
    • Java
  • javaバイナリ変換したデータのファイル出力

    現在、 String test_st = "0123456789abcdef"; というデータを byte[] bytes = test_st.getBytes("UTF-8"); このコードでバイナリ変換したのですが、このbytesに格納したバイナリデータたバイナリファイルとして出力したいのですが、どのようにしたらよいかご教授よろしくお願い致します。 BinaryFileWriter writer = new BinaryFileWriter(); このようなコードで出力できるとのサンプルもあったのですが、うまくいきません。 どうぞ、よろしくお願い致します。

    • ベストアンサー
    • Java
  • VBAでバイナリデータが上手く読めない。

    VBAでバイナリデータが上手く読めない。 もともとC言語でバイナリデータを加工していた事をVBAでやる事になったのですが、上手く読めない。 <VBA> Open inputFileName For Binary As #mFileNo のようにオープンして、 <VBA> Dim a(800) As Byte Get #1, , a のように記述すればC言語のように取得出来ると思ったのですが、上手く取得出来ません。 なんとなく分かった事ですが、800バイトの中に改行文字があった場合、そこまでを変数aに入れるようにすると出来そうなので、Getで改行コードがあった場合はそこまでを読み込むみたいな手段はありますでしょうか。inputだとデータがまったく見れませんでしたのでGetにて対応したいと思っています。 宜しくお願い致します。

  • バイナリデータのファイル

    FILE *stream1; if( (stream1 = fopen( argv[2], "rb" )) == NULL ) printf( "Can not open plane text file.\n"); /////////////////////////////////////////////////////////////////// // 平文 fseek(stream1, 0, SEEK_END); long filelen = ftell(stream1); fseek(stream1,0,0); int head = sizeof(long); mesLength = filelen + head; int baseByte = kk / 8 + ((kk % 8)?1:0); // 鍵バイト長 int mesByte = baseByte - 1; // 処理単位バイト数(暗号化ではbyte減らしておく) //暗号化 if(mesLength <= mesByte*20){//63が暗号化の作業サイズ *20= bufp = (char*)new(char[filelen +1+ int(kk/8 + 2)+head]); if(bufp == NULL){ cout << "No Memory" <<"\n"; cout.flush(); return(-1); } // 平文 *(long *)bufp = filelen; int i = head; do{ c = fgetc(stream1); bufp[i]=c; i=i+1; }while(c!=EOF); bufp[i-1]=NULL; for(int j=0; j<(kk/8+2); j++){ bufp[j+i] = NULL; } mesLength = i-1; // 平文長(バイト) + head 上のように、古い形でファイルを扱っています。 wchar_t を基本にプログラムを書き換えようとしていますが、 ファイルの扱いで、上記の部分と似たような扱いがしやすいのは、 _wfopen CreateFile の、どちらでしょうか? バイナリファイルが扱いやすいもの、8ビットごとの操作が可能なものを探しています。 それとも、あきらめて古いままのほうが良いのでしょうか? よろしくご指導下さい。

  • バイナリデーター内の文字を検索

    現在、以下のようなプログラムでバイナリファイルを読込んでいるのですが、そのデーターの中にある文字列の位置を検索したいのですが何かよい方法は無いでしょうか、for ~ next で廻すと一応はできますが、もう少し簡単な方法を探しています。 -------- Dim xBIN() As Byte Dim lngFileLenB As Long lngFileLenB = FileLen("バイナリ.BIN") Open "バイナリ.BIN" For Binary As #1 Get #1, , xBIN ' For i = 0 To lngFileLenB If IJP_DAT1(i) = CLng("&H" & "20") Then stop end if next i ---------- よろしくお願いします。

  • バイナリデータについて

    バイナリデータについて 先日関連した質問をさせていただいただのですが、 質問内容があやふやでしたのであらためて 今回POS連携システムにてPOSへ渡すデータを固定長バイナリ型式で作成いたします。 JAVAにてデータ作成を行うのですが、その作成方法がよくわかりません。 例えば次の6項目があるとして 元のデータ[0001] → 属性[K] 長さ[2Byte] 元のデータ[20100901] → 属性[K] 長さ[4Byte] 元のデータ[1234567890123456ffff] → 属性[K] 長さ[10Byte] 元のデータ[000100] → 属性[P] 長さ[3Byte] 元のデータ[0000001c] → 属性[P] 長さ[4Byte] 元のデータ[01] → 属性[B] 長さ[1Byte] 元のデータから各属性への変換、ファイル出力がイメージがわきません。 属性のK,P,Bというのもよくわかりません。 どなたかヒントでもいただけたら幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • バイナリデータの取り方

    VB6を使用して、バイナリファイルをバイナリデータとして文字列にとりたいのですが、全角文字が絡んだ時の処理がうまくいきません。 バイナリファイルをString型の変数に丸ごと読み込んで、後は何バイトから何バイト目を抜き取り数値に変換…という処理をしようとしています。 本来は、バイナリでファイルをオープンして、Getコマンドで取得するのが手っ取り早いのですが、ファイルアクセス回数を減らすため、このような面倒な方法をとっております。 そこで仮に、 dim test as string dim i as integer test = "aあ" & chr(1) & "0 " For i = 1 to 6 Debug.Print Asc(Strconv( _ MidB(Strconv(test,vbFromUnicode),i,1), _ vbUnicode)) Next のようなソースを作ってみました。(本来は文字列は数100KByte…) しかしながら、この方法ですと上の例では2Byte目、つまり「あ」の文字の1Byte目が「&H00」になってしまいます。その次は「&HA0」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

専門家に質問してみよう