• ベストアンサー

VB.NETで16進数+16進数や16進数*nをやる方法

16進数の計算で困っております。 以下のようなプログラムを作ろうと思っています。 入力1:  元の数値:(16進数/型String/例「0000563A」) 入力2:  加算数値:(16進数/型String/例「000001F5」) 入力3:  加算倍率:(10進数/型Integer/例「3」) 結果  入力1+(入力2*入力3)  (結果 16進数/型String/例 00005C19) このようなプログラムを打ちたいのですが、  String=入力1+入力2 とやると、当然ながら「000001F53」と、ただ文字列として追加された計算になってしまいます。 どうやって計算すればよいのでしょうか?

  • Haule
  • お礼率52% (125/240)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Imports System Imports Microsoft.VisualBasic Class Sample Shared Sub Main() Dim orgHNum as String = "0000563A" Dim AddNum as String = "000001F5" Dim k as Integer = 3 Dim result as String result = Format(CInt(val("&h"+orgHNum) + val("&h"+addNum) * k),"X8") Console.WriteLine(result) End Sub End Class

Haule
質問者

お礼

皆様、レスありがとうございました。 無事、できました^^

その他の回答 (2)

  • salf
  • ベストアンサー率42% (27/64)
回答No.2

以下を参考にすればできそうですよ。 http://www.atmarkit.co.jp/fdotnet/dotnettips/057convhex/convhex.html

  • akina_line
  • ベストアンサー率34% (1124/3287)
回答No.1

こんにちは。  入力を一度10進数に変換し、計算した後、結果を16進数に戻すのではだめでしょうか。 では。

関連するQ&A

  • VB.NETで16進数が正しいかどうかの判定方法を教えて

    VB.NETなのですが、String型に入ってる文字列が 数字とA~Fのみの16進数の値であるかどうかを判別するには どのようにしたら良いでしょうか? よろしくお願いいたします。

  • n進数を10進数に変換するプログラムがわかりません

    整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム 関数void base2dec(int n, string digits, int &dec)を使用する 実行例 110101(2)=53 123(8)=83 7ACE(16)=31438 以下はとりあえずつくったみたプログラムです #include<iostream> #include<string> using namespace std; void base2dec(int n, string digits, int &dec) { int i,x=0; for(i=0; i=digits.size()-1; i++) { if(n<10) { x=digits[i]-'0'; } else { x=digits[i]-'A'+10; } dec=(x*n); if(cin >> digits[i++]) { if(n<10) { dec=dec+(digits[i++]-'0'); } else { dec=dec+(digits[i++]-'A'+10); } } } int value = dec; } int main() { int n,value; string digits; cout << "何進数ですか-->"; cin >>n; cout << "数字列を入力してください-->"; cin >>digits;; base2dec(n,digits,value); cout << digits << "(" << n << ")=" << value << endl; return 0; } void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。

  • 指定した数だけデータをコピペする方法

    VBAの参考例を教えてください。 <シート1> A列に1から順に数字が入力されており、B列からE列まで数値のデータが入力されています。F列にはB列からE列にデータが入力されているセルの数をカウントした関数が入力されています。 <シート2> シート1のB~Eに入力されたデータが縦に入れ替えの上A列にコピぺされています。 ここで、シート1のA列の数値をコピーし、シート1F列に示されたデータ数分だけ、シート2のF列に縦に順々にペーストしていく方法をご教示ください。シート1のA列に入力された数値が最後の行にくるまでこれを繰り返します。 シート1 A B C D E F 1  a b c d 4 2  e d f   3 3  d e     2 ・ ・ ・ シート2 A B C D E F a         1 b         1 c         1 d         1 e         2 d         2 f          2 d         3 e         3 当方、VBAは全くの初心者です。急遽仕事で必要になってしまい、質問しました。 どうぞよろしくお願いします。

  • 16進数を2進数に変換するコードを知りたい

    16進数を2進数に変換するコードをselect caseを用いて作りました。 しかし、遅いです。 場合分けの考え方を利用して、例えば変数がFだったら・・みたいな感じで16個のcase全てを書いてみたのですが、もし他にもっと早く処理する方法が合ったら教えてください。 また、データ型はこれが最良でしょうか?? データ型 変数1、2 使用文字:相当長い文字列のためstring 変数3   使用文字:1-0,A-F,及び0000-1111:string 変数4、5 使用文字:1-1,000,000程度:integer

  • VB6イルミネーションプログラムその3

    いつもお世話になっています。 テキストボックスに1~255までの数字を入力し、コマンドボタンをクリックしたら、入力した数字を2進数に変換してランプを点灯するというプログラムを考えています。 例えば、テキストボックスに170と入力し、コマンドボタンをクリックしたら以下の様にランプが点灯するプログラムです。 ●○●○●○●○ 10101010 170の2進数 色々と調べ目的とする動きはするのですが、別の方法として値を引数にして2進数に変換した値でランプを点灯する処理を手続き(サブルーチン)として分離するという処理はどのようにすればよいのでしょうか? 現コードは以下です。(未熟ですので、コメントが見苦しくすみません…) Private Sub cmd1_Click() '変数の宣言 Dim Kazu As String Dim Binary(7) As Integer Dim Nishin As Integer Dim Value As String Dim Index As Integer 'テキストボックスへ入力した文字列を数値型に変換し、格納 Nishin = Val(txtKazu.Text) '2進数への変換処理 For Index = 0 To 7 Step 1 'Nishinに入力された数値を2で除算し、8ビット分の余りを繰返し求め格納 Binary(Index) = Nishin Mod 2 'Nishinの除算の商を求め、格納 Nishin = Nishin \ 2 Next Index '各余りを下から順に並べる処理 For Index = 7 To 0 Step -1 '変数Binaryを変数Kazuの型である文字列型へ変換し、連結して格納 Kazu = Kazu & CStr(Binary(Index)) Next Index '2進数の結果をランプコントロールへ反映 CWBtn(0).Value = Mid(Kazu, 8, 1) CWBtn(1).Value = Mid(Kazu, 7, 1) CWBtn(2).Value = Mid(Kazu, 6, 1) CWBtn(3).Value = Mid(Kazu, 5, 1) CWBtn(4).Value = Mid(Kazu, 4, 1) CWBtn(5).Value = Mid(Kazu, 3, 1) CWBtn(6).Value = Mid(Kazu, 2, 1) CWBtn(7).Value = Mid(Kazu, 1, 1) End Sub サブルーチンって??と思い、サイトや参考書を色々と見たのですが、サンプルコードなどを見ても理解出来ませんでした。 未熟で理解が浅いのですが、役割として「離れた箇所の文の並びを実行し、元の場所に制御を戻す」という様な感じですよね…元の場所で実行せず、わざわざ離れた箇所で実行するメリットもピンときません… 宜しくお願いします。

  • EXCELでマクロを使った検索&自動計算をするには?

    いつもいろんな方に回答いただき大変助かっております。 まずはそのお礼をさせていただきます。ありがとうございます。 さて、本題ですが、 基本データとして「名前」「金額」「とある数値データ」が各々「A列」「B列」「C列」に100件未満が並んでいます。 (例)    A列 B列 C列 1行 あ様 1000  50 2  い様  10   0 ↓  ↓  ↓  ↓ 100  を様 5000 2500  そして別の場所(同じシート内)に「名前」「金額」「とある数値データ」と、同じ内容が書き込めるスペースを作り、ここにデータを入れてマクロを実行すると、既存のデータ(A~C列)の同じ名前の人へ「金額」「とある数値データ」を加算するものを作りたいのです。 (例)【基本データ】    【加算データ】    A列 B列 C列 … F列 G列 H列 I列 1行 あ様 1000  50   名前 金額 数値 ★★ 2  い様  10   0   あ様  10  62 ↓  ↓  ↓  ↓ 100  を様 5000 2500 ←マクロ実行後、5000に10が足される  マクロを実行後は加算データの入力欄(例ではF2:H2)内の数値が消されすぐに次のデータが入力できるように出来れば尚いいです。 また、A列に追加データに入力したF2と同じ名前がなかった場合、I1(★★の部分)に「該当無し」と表示したいのです。 該当がなかった場合は手入力でA列に名前を新しく入力して金額・数値を入力しますので、判定が必要なのです。 このような内容をするにはどうしたらよいのでしょうか? ちなみにマクロの実行は追加欄の近くにオートシェイプなどでボタンを作りクリックすることでマクロを起動させたいと考えています。 乱文かつ長くなりましたが、どなたか指導いただける方よろしくお願い致します。

  • vb.netの問題で悩んでいます。

    vb.netで、このような問題が出て苦戦しています。 次のようなフォームを作成してください。 データAのテキストボックスには、文字列を、データBには回数を入れ、表示ボタンを押したときに文字列を回数分つないだものがメッセージボックスに表示される。(AにxyzでBに3ならばxyzxyzxyzと表示される) フォームは作成できました。肝心のプログラムが全然書けません。片方はstring 片方はintegerというくらいしか。。教えてください。

  • 3進数を10進数に変換

    3進数や5進数のように2の階乗ではない任意の進数の文字列を、C言語のビットシフトを使って10進数に変換するプログラムについて、質問させていただきます。 ビットシフトを使わないで、任意の進数の文字列を10進数に変換する方法は分かっていますが、ビットシフトを使った方が非常に計算が高速で出来るので、ビットシフトを使いたいと思っています。 下記のプログラムは4進文字列を10進整数に変換するものです。2進、8進文字列の場合は、シフトするビット数を1ビット、3ビット(つまり、ans <<= 1、ans <<= 3)にすれば計算することが可能です。しかし、3進数や5進数の場合、いろいろと考えたのですが、どのようにすれば良いのか分かりません。 下記のプログラムのようにビットシフトを使って3進数や5進数の文字列を10進数に変換するには、どのように工夫すれば良いでしょうか? どなたかご教授をお願いいたします。 #define STRING_NUM 2 /* 文字列の長さ */ int main(void) { int i; int ans = 0; /* 10進数の整数 */ char buf[STRING_NUM]; /* 4進数の文字列 */ buf[0] = '3'; buf[1] = '1'; for ( i = 0 ; i < STRING_NUM; i++ ){ printf(" %c", buf[i]); } printf("\n"); for ( i = 0 ; i < STRING_NUM; i++ ){ if ( buf[i] == '0' ){ ans <<= 2; /* シフトするビット数 */ ans |= 0; } if ( buf[i] == '1' ){ ans <<= 2; ans |= 1; } if ( buf[i] == '2' ){ ans <<= 2; ans |= 2; } if ( buf[i] == '3' ){ ans <<= 2; ans |= 3; } } printf( "ans = %d\n", ans ); return 0; }

  • C++のプログラムを作って頂けませんか?

    ソースをこちらにお願い致します!全て別のプログラムです cin.getline()を使用すること。また、stringクラス及び標準ライブラリの文字列関連の関数は使用しないこと 一つ目。 文字を入力すると、文字列中のアルファベット大文字を小文字に変換するプログラム。入力できる文字数は最大80文字。 例 入力:ABcdEFgh 結果:abcdefgh 二つ目。 文字列を入力すると、文字を循環しているように見えるプログラム。入力できる文字数は最大80文字。 例 入力:Hello 結果: Hello elloH lloHe loHel oHell Hello 三つめ。 文字列を入力すると、文字が逆順になるプログラム。入力できる文字数を最大80文字とする。 例 入力:Hello 結果:olleH どなたかお願いします!

  • たくさんの数の平均を求める方法について

    どうもこんにちは 研究でシミュレート用のプログラムを書いています 大量の数を入力し、その平均値を求めるコードを書いているのですが、 誤差ができるだけ小さくなる方法はないでしょうか 入力する数はdouble型の実数値あるいはint型の整数値で、 個数は1億程度です。 最初は1つずつ足していたのですが、整数型の場合はオーバーフローしてしまい、実数型の場合も徐々に加算する値が相対的に小さくなり、誤差が大きくなっていきました。 100万個ずつに区切って平均を求め、それを後で合計する方法も考えましたが、あまりきれいな方法になりません なにかいい方法はないでしょうか

専門家に質問してみよう