質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

8213閲覧

VB.NETでの16進数、10進数の相互変換について

Nasca

総合スコア10

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/09/27 06:16

VB.NETのBigInteger型を介して16進数、10進数の相互変換を行いたいです。
16進数の文字列を10進数へ変換する、あるいは10進数の文字列を16進数へ変換するという処理を作成しています。
Ctypeでの変換の際の桁落ちが発生しており、どうしたら処理が可能になるのかわからないのでご教授いただきたいです。

16進数の文字列が24バイトの時→10進数への変換はうまくいっているようにみえるのですが、
その結果の10進数の値を文字列として入力し、16進数へ変換をかけようとするとBigInteger型へ変換するときに桁落ちが発生していて元の16進数へ戻せなくなっています。
10進数の値は29バイトあり、Ctypeで変換かけた場合、24バイト以上の値を入れた場合は桁落ちしていたのを確認しました。

VB

1'16進数の時E28011606000020522F80078 2Dim strCode As String = "70098436782569829174974349432" 3Dim bintCade As Numerics.BigInteger = CType(strCode,Numerics.BigInteger) 4'16進数へ変換 5Dim strResult As String = bintCode.ToString("X").PadLeft(24,"0"c) 6Return strResult

上記の場合だとbintCadeの値は「70098436782569826953889579008」となってしまいます。
この10進数での入力を元の16進数へ変換するにはどのようにしたら良いのでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

キャストではなく、Parse()またはTryParse()メソッドで行ったほうがいいと思います。
https://docs.microsoft.com/ja-jp/dotnet/api/system.numerics.biginteger?view=netframework-4.7.2

VB

1bintCade = BigInteger.Parse(strCode)

投稿2018/09/27 07:15

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nasca

2018/09/27 08:38 編集

ありがとうございます! 型変換をCType一辺倒で行なっていたためParseのことすっかり忘れていました。 CTypeで桁落ちするのも今回初めて身に沁みたので、今後型変換の時に気をつけようと思います…… なんとか解決できそうです、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問