• 締切済み

数値のパック10進数の変換について(vb6)

こんにちは 現在、vb6で開発を行っております。 早速ですが、困っていることがあります。 データベースを読み込んで、その値をテキストファイルに出力しているのですが、ある項目(数値)だけパック10進数に変換して出力しなければなりません。 いろいろなサイトを調べた結果、 例:数値で432 は "0100001100101100" のように変換できることがわかりました。しかし、この時点ではただの文字列のためこの値をテキストファイルに出力しても意味がありません。パック10進数のコード(?)としてテキストファイルに出力するにはこの後、どのようにすればいいのでしょうか。 ご存じの方がいらっしゃれば、ご教授願えないでしょうか?

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

昔なつかし、IBM大型のPack、UnPackで悩まされましたが(そのときは相互変換指令があったが)、下記は昔旧BASICでやったような気もするが、十分な自信はないが。 ーー 上位4ビット、下位4ビットに分けて考える。 432は数がプラスのときは432C, マイナスのときは432Dだったと思うが、所定の符号桁4ビットを最後に添える決まり。2進数の符号と違い、符号桁も4ビットです。 ーー 最後の桁からまず符号C 00001100-ー下位4ビット注目 数の2 00100000ーー上位4ビット注目 両者をANDのビット演算で 00101100にする。  --この段階で文字として扱ってよいはず(x) ーー 数の3 00000011-ー下位4ビット注目 数の4 01000000ーー上位4ビット注目 両者をANDのビット演算で 01000011にする--この段階で文字として扱ってよい(Y) ーー Y&Xで結合。 == コンピュタは4ビット単位では処理させてくれないのではと思う。 言語処理系にもよると思うが。 それで上位下位4ビットずつの定数を定義し(上位用10種+下位用10種の20種)ANDで結合して8ビットを作り、できたビット文字列を、文字列として結合する。上位下と記の2桁ごとの繰り返しに持ち込む。 ただ値の型変換に厳しい言語だと苦労するかもしれない。8ビット2進数を、文字として扱わせてくれるかどうか。 === いまWEBを見ると http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200507/05070016.txt なども見つかった。 「Pack10進数」で照会してみて。小数ながら記事が出るようだ。

  • Nabehi
  • ベストアンサー率49% (25/51)
回答No.4

まずは、依頼者と仕様について必ず明確にしてください。 さもないとすぐにトラブルになります。 技術的質問はそれからになります。

  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.3

>この時点ではただの文字列のため 文字列といわずに直接数値に変換すればいいのでしょう。 432をパック10進に変換すれば2進数で0100001100101100です。 これをわざわざ文字列に入れかえる必要がないのではないでしょうか? 直接数値に変換したのならば16進数で432Cです。 見た目にはこの432Cをデータとして書き込むようにみえますが。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

その出力を受け取る側の仕様を確認なさったほうがいいのではないでしょうか 2進表記でいいのか 16進表記にするのか 桁数は3桁なのかなど 2進表記の際に 4ビットごとの区切りが必要なのか テキストファイルに出力する場合 Chr関数で文字コードに変換して出力でしょう 'インデントに全角スペースを使用しています dim s as String, s1 as string, n as byte dim number as integer number = 432 s = Str(number) do   s1 = left(s,2)   s = mid(s,3)   ' 変換対象の文字列が無くなればループを抜ける   if len(s)= 0 then exit do   ' 変換対象の文字列が2文字未満なら   if len(s1) < 2 then     '符号コードを追加する     if number >= 0 then       s1 = s1 & "c"     else       s1 = s1 & "d"     end if   end if   n = val( "&h" & s1 )   print #1, chr( n ); loop といった具合でしょう

  • Nabehi
  • ベストアンサー率49% (25/51)
回答No.1

テキストファイル上では、すべての内容は文字列となります。 本件でのパック10進数表記の仕様はどのようになっていますか? +432ならば、 0100 0011 0010 1100 とのように、バイト毎に半角スペースでも挿入するのでしょうか? とにかく出力するテキストファイルの仕様がわからないと回答しにくいです。

beginner12
質問者

お礼

早速のご回答ありがとうございます。 仕様ははっきりしません(パックとしか・・・) もし、Nabehiさんのおっしゃるように 0100 0011 0010 1100 のようになるのであれば、どのようにテキストファイルに出力すればよろしいのでしょうか?

関連するQ&A

  • 10進数の実数値の値を32ビットで表す16進法に変換したいのですが

    10進数の実数値の値を32ビットで表す16進法に変換したいのですが 方法がわかりません。 例えば10進(1.23)を16進(70A43F9D)に変換したいのです。 ご存知の方がいらっしゃいましたら宜しくお願いいたします。 環境は、VB2005です。

  • VB.netのDataGridViewについて

    VB.netのDataGridViewについての質問です。 DataGridViewで出力された行を選択して、 その行の値をテキストボックスなどに出力させることは可能なのでしょうか? やりたいことは 1.データベースより取得してきたDatatableをDataGridViewに出力 2.出力されたDataGridViewの行を選択する 3.その選択された行の項目(複数)の値を画面上の個々の   テキストボックスなどに反映させる です

  • VB6でテキストファイルをCSVファイルに変換

    VB6でテキストファイルをCSVファイルに変換の機能を作っていますが、 壁にぶつかりました; 項目         サイズ(byte) 1.作成日        15 2.マスタID      10 以上の2項目は固定です。 3.コード      9 4.名前1         10 5.名前n(登録数最大20個とする)19個*10byte=190 5.年齢    3 ''項目名の取得 ITR = ITR + Chr(39) + "作成日" + Chr(39)  中略 ''ファイルへの書込 ObjOutFile.Write (ITR) ITR=からはどうやって書くのかよくわからないです。 一行で出力したいので、名前は複数ある場合は、ヘッダの項目名前1、名前2、名前3のように並びたいのですが。。 詳しいかたいらしゃったら、ご教授ください。

  • テキスト型に入れた値を数値に変換し、「#エラー」を

    テキスト型に入れた値を数値に変換し、「#エラー」を0にしたいです。 access2003です。 テーブル1を ・テキスト型 ・主キーなし として データを 1 2 あ を投入します。 そして SELECT CLng(テーブル1!フィールド1) AS 数値型に変換 FROM テーブル1; クエリを作りました。 このクエリを開くと 1と2は数値に変換されますが、文字列を入れた「あ」は 「#エラー」になります。 「#エラー」を0にしたいのですが どうすえばいいのでしょうか?

  • VB2008による数値の比較

    円周率暗記練習のプログラミングをVB2008で行なっています。 文字列であればLike演算子で前方一致を真とすることができるのでしょうが 数値の場合は簡単にはいかないのですか? 要は3.14や3.1415のように途中まで合っていれば真としたいのです。 自分なりに考えたのですが次のような方法があるのかなと思います。 普通に配列を利用する。 数値を文字列に変換してLike演算子を使う? VB2008で利用できる機能がある? 初心者なので数値と文字列の明確な違いも良く分かっていません。 配列を利用するのは面倒そうなので簡単な方法を知りたいのです。 よろしくお願いします。

  • 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
  • データベースにテキスト型で入っている数値を並べ替えるには?

    VB6.0で開発しているのですが、 ACCESSにテキスト型で入っている数値のデータを、 SQL文で抽出してきて、ラベルに順番に表示させようと思ったのですが、 テキスト型を昇順に並べ替えると 1 10 11 . . . 19 2 20 となってしまいます。 数値型に変換しようとも思ったのですが、 データとして数値だけが入るとは限らないので、 どうしていいか困ってます。 何か良い解決策はないものでしょうか? どうぞ、よろしくお願いしますm(_ _)m

  • CASLIIの数値データ入出力

    入出力のときはJISの文字コード表の値が使われ、それ以外の計算などにおいては通常の2進数が使われるとのことですが、その変換はどのように行うのでしょうか。 テキストには「1~9の文字には16進数の(0030)を減算」「A~Fの文字には(0037)を減算」と書いてあります。 例えば ’5’は内部コードでは(0035)、 16進数の数値では(0005) 数値と文字コードの差は16進数で(0030) というのは理解できます。 ただアルファベットになると理解できません。 例えば ’A’は内部コードで(0041) 16進数の数値では(000A) 数値と文字コードの差は16進数で(0037) なぜここで(0037)になるのでしょうか・・。 (0041)を(0037)で減算し、(000A)になるまでの過程を教えてください。

  • Excel2000での形式を指定しての貼り付け

    VB2005からExcel2000の新規ファイルへクリップボードにある値を貼り付けたいのですが、すべての値をテキスト形式(文字列?)で貼り付けたいのです。 貼り付ける値 コード    名称 001      hoge1 002      hoge2 貼り付けた後のExcelの見た目 コード    名称 1       hoge1 2       hoge2 上記のようになってしまうので、コードがExcel上では数値?扱いになってしまいます。Excel2007では、PasteSpecial(Format:="Unicode テキスト")でテキスト形式で貼り付けて問題はなかったのですが、Excel2000で同じ処理をすると、コードの001が1となってしまうのです。 Excel2000でExcel2007のようなPasteSpecial(Format:="Unicode テキスト")の貼り付けのやり方は、どのようなコードを記述すれば良いのでしょうか? 開発環境 OS:Windows XP SP2 VB:2005 Excel:2000

  • 文字変換。

    UNIXサーバより、FTPでファイルを所得し、 そのデータをEUCからシフト-JISへ変換するという処理を作成したいのですが、 Help等を見ても今一良く解かりませんので… 良いアドバイスがあったら御教授下さい。 その変換データなのですが、 数値と漢字を含む文字列が入り混じったものです。 開発環境 OS WinXP・Win2000 VB VB5.0(SP3) よろしくお願いします。

専門家に質問してみよう