• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答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