プロが教える店舗&オフィスのセキュリティ対策術

こんにちは
現在、vb6で開発を行っております。

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

A 回答 (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?p …
なども見つかった。
「Pack10進数」で照会してみて。小数ながら記事が出るようだ。
    • good
    • 1

まずは、依頼者と仕様について必ず明確にしてください。


さもないとすぐにトラブルになります。

技術的質問はそれからになります。
    • good
    • 0

>この時点ではただの文字列のため



文字列といわずに直接数値に変換すればいいのでしょう。
432をパック10進に変換すれば2進数で0100001100101100です。
これをわざわざ文字列に入れかえる必要がないのではないでしょうか?

直接数値に変換したのならば16進数で432Cです。
見た目にはこの432Cをデータとして書き込むようにみえますが。
    • good
    • 0

その出力を受け取る側の仕様を確認なさったほうがいいのではないでしょうか



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
といった具合でしょう
    • good
    • 0

テキストファイル上では、すべての内容は文字列となります。


本件でのパック10進数表記の仕様はどのようになっていますか?
+432ならば、

0100 0011 0010 1100

とのように、バイト毎に半角スペースでも挿入するのでしょうか?

とにかく出力するテキストファイルの仕様がわからないと回答しにくいです。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。

仕様ははっきりしません(パックとしか・・・)

もし、Nabehiさんのおっしゃるように
0100 0011 0010 1100 のようになるのであれば、どのようにテキストファイルに出力すればよろしいのでしょうか?

お礼日時:2008/01/22 17:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!