バイナリデータの作成方法と属性について

このQ&Aのポイント
  • JAVAを使用して固定長バイナリ型式でデータを作成する方法について教えてください。
  • バイナリデータの各属性(K, P, B)の意味と変換方法についても教えてください。
  • 質問者はPOS連携システムで使用するデータをバイナリ形式で作成したいが、具体的な方法が分からないようです。
回答を見る
  • ベストアンサー

バイナリデータについて

バイナリデータについて 先日関連した質問をさせていただいただのですが、 質問内容があやふやでしたのであらためて 今回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
  • 回答数1
  • ありがとう数3

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

  • ベストアンサー
noname#245936
noname#245936
回答No.1

私はPOSのソフト開発してますけど。 おっしゃられるフォーマットの部分はちんぷんかんぷん、わかりません。 こういう連携データは各社独自で考えられることが多いので。 相手さんのシステム屋に問い合わせてみましょう。 どういうデータを最終的に作ればいいかがわかれば一撃なので。 相手のシステム屋にサンプルコードやデータをもらえばいいかと。 ここで質問すること自体時間の無駄。 意味ないと思いますよ。 私ならそれがわかるまで開発着手しません。

honeori_aitata
質問者

補足

ごもっともなご意見ありがとうございます。 ちなみにパックドデシマルに変換しデータ出力とかいう話になれば 方法はおわかりになられますでしょうか?

関連するQ&A

  • PHPのバイナリ型文字列の取り扱いについて

    お世話になります。 PHPについて困っている事がありまして、ご質問させて頂きます。 現在標準入力でバイナリ型とアスキー型の混ざった文字列を 受け取り処理をするコーディングをしているのですが ------------------------------------------------ FFFF1B ------------------------------------------------ ※FFFF(バイナリ型:2byte)1B(アスキー型:2byte) 上記の文字列を標準入力し、以下のコードを実行すると $fp = fopen("php://stdin", "rb"); $contents = fread($fp, 4); echo $contents; --------------------------------------------- 出力結果 ---------------------------------------------                FFFF _______________________________________________________________________ と表示され、FFFFはバイナリ型なので2バイト(だと思うのですが、、) なのに、php上では4バイトと認識されてしまいます。 どこかおかしい所があればご指摘頂きたく思います。 また、勘違いしている点があれば是非ご指摘くださいます様 宜しくお願いします。 大変お手数ですが宜しくお願いします。

    • ベストアンサー
    • PHP
  • php のバイナリデータ操作について

    php のバイナリデータ操作で詰まっています。 やりたいことは、バイナリファイルから読み込んだ2byteのデータを 4bitずつに取り出して、データをチェックしたいです。 マスクして、シフトしてと考えたのですが マスクの時点で意図するデータではなくなっています。 良い方法はありますでしょうか。 以下、試してみた結果です。 //2byteづつ読む $bin_data = fread( $handle, 2 );  ■bin2hex()の後にマスク $dataStr = bin2hex($bin_data); print ( $dataStr ); →結果 ABCD $mask = ($dataStr & "FFFF") ; print ( $dataStr ); →結果 @BBD $mask = ($dataStr & 0xFFFF) ; print ( $dataStr ); →結果 0  ■bin2hex()の後にマスク $mask_data = ( $bin_data & 0xFFFF ) ; $dataStr = bin2hex($mask_data); print ( $mask_data ); →結果 0 $mask_data = ( $bin_data & "FFFF" ) ; $dataStr = bin2hex($mask_data); print ( $mask_data ); →結果 文字ばけ

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

    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」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

  • C++でバイナリデータのコピープログラムの作り方

    現在、バイナリのデータを高速でコピーするルーチンを 考えています。 既存データ(Data A) を 新規データ(Data B)、新規データ(Data C)にコピーするときに、3byteずつコピーしたいのですが。 Data BとData Cへは3Byteを交互にコピーします。 (以下のようになります) aaa bbb ccc ddd eee (←コピー元 Data A) B C B C B (←コピー先 Data B,C) 一番早くコピーする方法をお教え願えませんでしょうか?

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

  • バイナリ出力

    バイナリのテストデータを作成しており、VBAで作成中です。 以下の内容で困っております。 「0~65525の値を2バイトの情報(VCでいうunsigned shortの型)としてバイナリファイルに出力する。」 変数long型で値を取得した場合、4バイトの情報としてバイナリ出力されてしまいます。これを2バイトの情報として出力する方法をご教授願えないでしょうか? よろしくお願いします。

  • バイナリファイルの編集

    サイズの大きいバイナリファイルがあります。 1レコードのサイズは200バイトです。 これの6バイト目から17バイト目を抜いたファイルを 作成するプログラムを考えています。 バイナリファイルの読みんだデータは 何型に格納すればいいのかわかりません。 よろしくお願いします。

  • ruby バイナリ入出力について

    ruby初心者です。 バイナリファイルを読み込んで、その値を2倍して再びバイナリファイルに書き込む ソースを作りたいのですが、どなたかご教示願えますでしょうか。 以下試行錯誤して作ってみたのですが、このソースだと 例えば31というバイナリデータが62で書かれず、 36、32のasciiコードで保存されてしまいます。。 ----------------------------- BinData = open("in.data") BinData.binmode File.open("out.data", "wb"){|f| while (b = BinData.read(1)) m = b.unpack('C')[0]*2     #取り込んだバイナリデータを整数化して2倍 p sprintf("%x", m) k = format("%x", m)       #16進数に変換 f.write(k) end } すみませんが宜しくお願い致します。

  • バイナリデータの書込みについて

    こんにちは、初めまして。 さっそくなんですが、バイナリデータの操作を行っていて、ちょっと気になることがあり、質問させて頂きます。 現在あるバイナリデータファイルの読出しには成功し、一応思った通りに書込み、 そのデータは壊れず、読み出せたんですが・・・。 そのバイナリデータファイルは当然のように、アスキー型や文字型、ビッグエンディアンのshortやlongがバイト長ごとに入り混じってます。 アスキー型や文字型は問題なく読み書きできるんですが、 ビッグエンディアンのshortやlongを書き込む時、バイト長を指定してやると、データが壊れてしまいます。 例えば、2バイトのビッグエンディアンのshortを読み出して、そのままリスト値に変換をかけ、なにも加工することなく、再びバイナリ構造体に変換しても、データが壊れてしまいます。 例 失敗) INは読み出すファイル、OUTは書き込むファイル read (IN,$dataB,2); $dataA = unpack("n2",$dataB); $dataB2 = pack("n2",$dataA); print OUT $dataB2; 現在、packするときに、データ長をしてせず、*とすることでデータの書込みには成功してる(ちゃんと読めるデータとして)んですが、これから先、こういったデータを加工して書き込む場合、データ長を指定せずに書き込むというのは・・・。ちょっと嫌な感じです。 例 成功) INは読み出すファイル、OUTは書き込むファイル read (IN,$dataB,2); $dataA = unpack("n2",$dataB); $dataB2 = pack("n*",$dataA); print OUT $dataB2; 何が原因なのか、わからず困っています。 なにぶん素人なもので、やってること自体間違っているのかもしれませんが、どなたか御回答頂ければ幸いです。 ここに書いている質問の意図がわからない等、ありましたらその旨お答え頂ければ、私の知る限りお答えしようと思いますので、どうか宜しくお願い致します。

    • ベストアンサー
    • Perl
  • バイナリ読み込みについて

    お世話になります。バイナリファイルの読み込みについて質問させてください。 バイナリファイルはC#で出力したものでushort型(符号無し16bit)で書き込んでいます。 //C#でushort型データのバイナリ書き込み例 private static void WriteBinary(){  ushort data=5000;   BinaryWriter bw = new BinaryWriter(new FileStream(@"C:\Binary.txt", FileMode.Create, FileAccess.Write)); bw.Write(data); bw.Close(); } これをJavaで読んで、書き込んだ値5000を取得したいのですが、 C#のushortは符号無しの2Byteなんので、Javaでそれに相当するように readUnsignedShortで読み込んだのですがうまくいきません。どなたかご教授ください。 //Javaでushort型データのバイナリ読み込み private static void ReadBinary(){  DataInputStream dis = new DataInputStream(new FileInputStream("C:\\Binary.txt"));  int data = dis.readUnsignedShort();  System.out.println(data);  } すると「34835」と表示されます。その他、readShort()→-30701 read(byte[2])として byteに格納してbyte[0]と[1]を足しても-101になり取得できませんでした。 保存されたデータは符号なしの16ビットなのでreadUnsignedShort()で取得できると 思ったのですが、何か根本的に考え方が違うのでしょうか?? ※もちろんC#でReadInt16で読み取ると正常に5000を取得できした。

    • ベストアンサー
    • Java

専門家に質問してみよう