2進数の計算ができるプログラムを組んだのですが、計算結果を同時にアスキーコードに変換させることが出来ると聞いたのですがそれはどのようにやれば変換できるのですか?わかる方アドバイスをお願いします。よろしくお願いします。
環境が分からないので、適当に。
VB6ならAsc関数かな。
VB.NETは普通にEncoding関係だと思う。
アスキーコードに変換って具体的には何をどのようにしたいの?
(1)数値01010101(2進表現)を文字列で"55"とする
(2)数値01010101(2進表現)を文字列で"01010101"とする
(3)数値01010101(2進表現)を文字"U"とする
(4)それ以外
具体的に書いて下さいな
VBのバージョンもね
単純に、基数変換(2進を10進、2進を16進)のような気がする。
それならば、過去に掲示板(「花ちゃん」のわいわいがやがや)
で見つけた。
みなさんご返信ありがとうございます。
VBのバージョンは6.0です。やりたいのは0123さんが書いてくださった(3)のような変換をしたいと思っています。よろしくお願いします。
※Asc()じゃなくてChr$()だった…(orz
よくよく考えてみれば…
> 2進数の計算ができるプログラム
これは
「2進数表現のStringを数値として得て
その値をLong型などに入れてから計算し、
結果を2進数表現にするプログラム」
ということなのかな…?
中間にLong型などに変換しているので、そのままChr$()に入れていいと思います。
ガッさん返信ありがとうございます。
ガッさん言われるようLong型で変換しています。
2進数計算された値をそのままChr$()に入れればよいのでしょうか?
> ガッさん言われるよう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)になっているのだとしたら、元の値に
戻すための再計算を行わないといけないでしょう。
ご返信ありがとうございます。
10進数なら10進数、2進数なら2進数として数値を持たせています。
Chr、ChrWでやってみたいと思います。
すいません、独学で始めたばかりで言ってることが変かもしれません。
ですが、よろしければまたアドバイスお願いします。
Chrに渡してみたつもりなのですが、「配列がありません」というエラーメッセージが出てしまいます。これはChrの使い方がおかしいのでしょうか?
> 10進数なら10進数、2進数なら2進数として数値を持たせています。
文字列なのか、数値なのかをハッキリさせてください。
http://web.archive.org/web/20040217134450/www.gj.il24.net/~nakasima/prog/radix/index.htm
> これはChrの使い方がおかしいのでしょうか?
どのように使っているのかわからないので、答えようが無いです。
Dentalさん返信ありがとうございます。
そして、返信が遅くなりまして申し訳ないです。
文字を数値に置き換えるようにプログラムを組んでるつもりなので、数値だと思います。
Chrはどのように使えば良いのでしょうか?
よろしければ教えてください。よろしくお願いします。
> 文字を数値に置き換えるようにプログラムを組んでるつもりなので、数値だと思います。
そんな無責任な…しっかりしてください
下の方に「しっかり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")))
ご返信ありがとうございます。
そうですよね聞くからにはしっかりしないといけませんよね。
申し訳ないです。
それに関数のプログラムまで載せてくださってありがとうございます。
後、アスキーコードとして評価し、そのコードに対応する文字列を返すとの事なのですが、例えば、テキスト1に10進数を入力し、テキスト2に2進数で表示させるとして、このテキスト2の値をアスキーコードとしてテキスト3に表示させるには、使用例)に書いてくださったdebug.? Chr$(Val("&h" & b2h("01010101")))をどのように使用するのでしょうか?
使用例を理解していれば、わかると思いますが…。
テキスト3.Text = Chr$(Val("&h" & b2h(テキスト2.Text)))
ご返信ありがとうございます。
>テキスト3.Text = Chr$(Val("&h" & b2h(テキスト2.Text)))
このようにやっていたのですが、1を入力すると、.と変換されるのですが、1以外を入力すると、プロシージャの呼び出しが違うか引数が不正と出てしまいます。これを解決するにはどうすればよいのでしょうか?
1 または 0 の羅列の文字列であることが前提であって、
それ以外の場合の使用はどこかにかかれていました?
文字列の ABC とか入力された場合にどうしたいとか、そういう仕様を
明確にしてください。
# というか、デバッグしてみてくださいよ。。。
訂正
> それ以外の場合の使用はどこかにかかれていました?
それ以外の場合の仕様はどこかにかかれていました?
# 下はのヤツはきちんと変換できているのに。。。orz
すいません、1・0の羅列の文字列にしてみたらうまく変換できました。
どうもお騒がせしました。
そして、返信をして下さったみなさん本当にありがとうございました。
私自身さらに勉強して力をつけていきたいと思います。
またお聞きすることがあると思いますがその時またアドバイスを頂けたらと思います。ありがとうございました。
ツイート | ![]() |