2進をアスキーコードに変換するには?

解決


ごん  2006-01-26 01:59:51  No: 129839

2進数の計算ができるプログラムを組んだのですが、計算結果を同時にアスキーコードに変換させることが出来ると聞いたのですがそれはどのようにやれば変換できるのですか?わかる方アドバイスをお願いします。よろしくお願いします。


ガッ  2006-01-26 03:26:24  No: 129840

環境が分からないので、適当に。
VB6ならAsc関数かな。
VB.NETは普通にEncoding関係だと思う。


0123  2006-01-26 03:32:03  No: 129841

アスキーコードに変換って具体的には何をどのようにしたいの?

(1)数値01010101(2進表現)を文字列で"55"とする
(2)数値01010101(2進表現)を文字列で"01010101"とする
(3)数値01010101(2進表現)を文字"U"とする
(4)それ以外

具体的に書いて下さいな
VBのバージョンもね


いな  2006-01-26 04:36:13  No: 129842

単純に、基数変換(2進を10進、2進を16進)のような気がする。

それならば、過去に掲示板(「花ちゃん」のわいわいがやがや)
で見つけた。


ごん  2006-01-26 08:55:02  No: 129843

みなさんご返信ありがとうございます。
VBのバージョンは6.0です。やりたいのは0123さんが書いてくださった(3)のような変換をしたいと思っています。よろしくお願いします。


ガッ  2006-01-26 09:28:26  No: 129844

※Asc()じゃなくてChr$()だった…(orz

よくよく考えてみれば…
> 2進数の計算ができるプログラム
これは
「2進数表現のStringを数値として得て
  その値をLong型などに入れてから計算し、
  結果を2進数表現にするプログラム」
ということなのかな…?
中間にLong型などに変換しているので、そのままChr$()に入れていいと思います。


ごん  2006-01-26 22:32:45  No: 129845

ガッさん返信ありがとうございます。
ガッさん言われるようLong型で変換しています。
2進数計算された値をそのままChr$()に入れればよいのでしょうか?


Dental  2006-01-26 23:01:53  No: 129846

> ガッさん言われるようLong型で変換しています。

「Long型に変換」とか「Long型を変換」ではなく、「Long型で変換」? 

> 2進数計算された値をそのままChr$()に入れればよいのでしょうか?

えーと。たとえば、(10進数の)85という『数値』について考えると、

16進数表現では "55" という『文字列』になります。
10進数表現では "85" という『文字列』になります。
 8進数表現では "125" という『文字列』になります。
 2進数表現では "01010101" という『文字列』になります。

この場合、その Long型(の変数)には、どんな値として格納してますか?

元となる「85」という数値の方を持たせているのですか? それとも、
2進数表現を10進数として無理矢理解釈して「1010101」という数値として
変数に持っているのですか? 

Long型変数の内容が、元の値(10進数で85、2進数で01010101)であるなら、
それをそのまま Chr なり ChrW なりに渡せばオッケーですけど、進数を
無理矢理変換した値(10進数の1010101)になっているのだとしたら、元の値に
戻すための再計算を行わないといけないでしょう。


ごん  2006-01-26 23:17:17  No: 129847

ご返信ありがとうございます。
10進数なら10進数、2進数なら2進数として数値を持たせています。
 Chr、ChrWでやってみたいと思います。
すいません、独学で始めたばかりで言ってることが変かもしれません。
ですが、よろしければまたアドバイスお願いします。


ごん  2006-01-26 23:57:56  No: 129848

Chrに渡してみたつもりなのですが、「配列がありません」というエラーメッセージが出てしまいます。これはChrの使い方がおかしいのでしょうか?


Dental  2006-01-27 00:59:47  No: 129849

> 10進数なら10進数、2進数なら2進数として数値を持たせています。
文字列なのか、数値なのかをハッキリさせてください。
http://web.archive.org/web/20040217134450/www.gj.il24.net/~nakasima/prog/radix/index.htm

> これはChrの使い方がおかしいのでしょうか?
どのように使っているのかわからないので、答えようが無いです。


ごん  2006-01-27 09:35:31  No: 129850

Dentalさん返信ありがとうございます。
そして、返信が遅くなりまして申し訳ないです。
文字を数値に置き換えるようにプログラムを組んでるつもりなので、数値だと思います。
Chrはどのように使えば良いのでしょうか?
よろしければ教えてください。よろしくお願いします。


ガッ  2006-01-27 10:19:53  No: 129851

> 文字を数値に置き換えるようにプログラムを組んでるつもりなので、数値だと思います。
そんな無責任な…しっかりしてください
下の方に「しっかりStringで返す関数」を載せておきました
…なので、適当な回答をされると困ります

※また、ちょっと頑張れば、小数にも対応した基数変換もできるので
  「数値」よりも型名の方が確実です

> Chrはどのように使えば良いのでしょうか?
断っておきますが、
Chr()関数は「引数に与えられた数値をアスキーコード(?)として評価し、そのコードに対応する文字列を返す」だけのものです。
なので
debug.? Chr$(Asc("A")),Chr$(65),Chr$(1+2+3+4+5+6+7+8+9+10+10)
の様に使うだけです。

簡易2進数⇔16進数表記変換関数
'遅い。
Public Function b2h(ByVal s As String) As String
    Static table        As Collection
    Dim i               As Long
    Dim ss              As String
    Dim sLen            As Long
    Dim sLen_pad        As Long
    
    'tableを作成
    If table Is Nothing Then
        Set table = New Collection
        For i = 0 To 15
            ss = IIf(i And 2 ^ 3, "1", "0")
            ss = ss & IIf(i And 2 ^ 2, "1", "0")
            ss = ss & IIf(i And 2 ^ 1, "1", "0")
            ss = ss & IIf(i And 2 ^ 0, "1", "0")
            table.Add Hex$(i), ss
        Next
    End If
    
    'sを8文字単位に切り上げる
    sLen = Len(s)
    sLen_pad = (((sLen - 1) \ 8) + 1) * 8
    ss = String(sLen_pad - sLen, "0") & s
    
    '4文字ずつ変換していく
    For i = 1 To sLen_pad Step 4
        b2h = b2h & table(Mid$(ss, i, 4))
    Next
End Function

使用例)
debug.? Chr$(Val("&h" & b2h("01010101")))


ごん  2006-01-27 11:09:36  No: 129852

ご返信ありがとうございます。
そうですよね聞くからにはしっかりしないといけませんよね。
申し訳ないです。
それに関数のプログラムまで載せてくださってありがとうございます。
後、アスキーコードとして評価し、そのコードに対応する文字列を返すとの事なのですが、例えば、テキスト1に10進数を入力し、テキスト2に2進数で表示させるとして、このテキスト2の値をアスキーコードとしてテキスト3に表示させるには、使用例)に書いてくださったdebug.? Chr$(Val("&h" & b2h("01010101")))をどのように使用するのでしょうか?


LESIA  2006-01-27 14:07:38  No: 129853

使用例を理解していれば、わかると思いますが…。
テキスト3.Text = Chr$(Val("&h" & b2h(テキスト2.Text)))


ごん  2006-01-27 20:52:50  No: 129854

ご返信ありがとうございます。
>テキスト3.Text = Chr$(Val("&h" & b2h(テキスト2.Text)))
このようにやっていたのですが、1を入力すると、.と変換されるのですが、1以外を入力すると、プロシージャの呼び出しが違うか引数が不正と出てしまいます。これを解決するにはどうすればよいのでしょうか?


Blue  2006-01-27 20:57:45  No: 129855

1 または 0 の羅列の文字列であることが前提であって、
それ以外の場合の使用はどこかにかかれていました?

文字列の ABC とか入力された場合にどうしたいとか、そういう仕様を
明確にしてください。
# というか、デバッグしてみてくださいよ。。。


Blue  2006-01-27 20:58:45  No: 129856

訂正
> それ以外の場合の使用はどこかにかかれていました?
それ以外の場合の仕様はどこかにかかれていました?

# 下はのヤツはきちんと変換できているのに。。。orz


ごん  2006-01-27 21:10:53  No: 129857

すいません、1・0の羅列の文字列にしてみたらうまく変換できました。
どうもお騒がせしました。
そして、返信をして下さったみなさん本当にありがとうございました。
私自身さらに勉強して力をつけていきたいと思います。
またお聞きすることがあると思いますがその時またアドバイスを頂けたらと思います。ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加