2016-08-01 8 views
0

ユーザーが数字を入力できるテキストボックスを追加したいと思います。どんなに大きいか小さいかにかかわらず、それは倍数として格納する必要があります。クリックボタンを押すと、2番目のテキストボックスに16進数が表示されます。 16バイトの16進数を4バイトの4つの変数に変更する方法を教えてもらえれば、ボーナスポイントになります。DoubleからHexに変換する方法はありますか?

たとえば、ユーザーはtextbox1に1234.56を入力します。ボタン1をクリックすると、textbox2は16進法 "40934A3D70A3D70A"を表示します。次に、その文字列を4つの異なる4バイト文字列に展開します。str1 = 1093、str2 = 4A3D、str3 = 70a3、str4 = d70Aです。

+2

何語あなたがこれを行うにしたいですか?あなたは3つの全く異なるものでそれをタグ付けしました。 – Comintern

+0

StackOverflowでご質問ありがとうございます!これは有効な質問ですが、非常に良い質問ではありません。 'vb.net'に簡単に変換できるStackOverflow上でさえ、' C# 'でたくさんの結果を与えるべきであれば、選択した検索エンジンを使った簡単なクエリです... – ventiseis

+0

申し訳ありません、ビジュアルベーシック。 –

答えて

1

BitConverterをお探しですか? C#実装:

double source = 1234.56; 

// 40934A3D70A3D70A 
string result = string.Concat(BitConverter 
    .GetBytes(source) 
    .Reverse() 
    .Select(b => b.ToString("X2"))); 

resultを得た、Substringでその部分を抽出:

string str1 = result.Substring(0, 4); 
string str2 = result.Substring(4, 4); 
string str3 = result.Substring(8, 4); 
string str4 = result.Substring(12, 4); 
0

あなたがC#実装を探しているなら、これを試してみてください。

static void Main(string[] args) 
    { 
     var number = 1234.56; 
     string hex = DoubleToHex(number); 
     string part1 = hex.Substring(0, 4); 
     string part2 = hex.Substring(4, 4); 
     string part3 = hex.Substring(8, 4); 
     string part4 = hex.Substring(12, 4); 
    } 

    internal static string DoubleToHex(double value) 
    { 
     var b = BitConverter.GetBytes(value).Reverse(); 
     string result = string.Join(string.Empty, b.Select(i => i.ToString("X2")).ToArray()); 

     return result; 
    } 
0

これは、あなたが得る最も効率的な答え:

unsafe static void Main() 
{ 
    var value = 1234.56; 
    var pLong = (long*)&value; 
    var fullString = (*pLong).ToString("X"); 
    var pShort = (short*)pLong; 
    short value0 = *pShort, value1 = *(pShort + 1), value2 = *(pShort + 2), 
      value3 = *(pShort + 3); 
    string s0 = value0.ToString("X"), s1 = value1.ToString("X"), s2 = value2.ToString("X"), 
      s3 = value3.ToString("X"); 

    Debug.Print(fullString); 
    Debug.Print(s0); 
    Debug.Print(s1); 
    Debug.Print(s2); 
    Debug.Print(s3); 
} 

出力: 40934A3D70A3D70A

D70A

0

部70a3

4A3D

4093はそれを試してください:DoubleToHex

  //dashseparator 0 /2/4 
     public string DoubleToHex(double d, bool reverse = false, int dashSeparator = 0) 
     { 
      byte[] bytes = BitConverter.GetBytes(d); 
      if (reverse) bytes = bytes.Reverse().ToArray(); 
      var hex = BitConverter.ToString(bytes); 
      var hex4 = ""; 
      if (dashSeparator == 2) return hex; 
      if (dashSeparator == 4) 
      { 
       hex = hex.Replace("-", ""); 
       hex = Regex.Replace(hex, ".{4}", "$0-").TrimEnd('-'); 
       return hex; 
      } 
      return hex.Replace("-", ""); 
     } 

サンプル出力:

Double: 1234.56 
Hex:     0AD7A3703D4A9340 
Hex in Reverse order: 40934A3D70A3D70A 
Hex in Reverse order separate by 2 digits: 40-93-4A-3D-70-A3-D7-0A 
Hex in Reverse order separate by 4 digits: 4093-4A3D-70A3-D70A 

次のことができます。

順/逆順に表示される生成された六角-control。 0(なしセパレータ)によって

-Addダッシュセパレータ/ 2/4桁

編集:Vb.Net

にコード変換

Vb.Net版

'dashseparator 0 /2/4 
Public Function DoubleToHex(d As Double, Optional reverse As Boolean = False, Optional dashseparator As Integer = 0) As String 
Dim bytes As Byte() = BitConverter.GetBytes(d) 
If reverse Then 
    Array.Reverse(bytes) 
End If 
Dim hex = BitConverter.ToString(bytes) 
Dim hex4 = "" 
If dashseparator = 2 Then 
    Return hex 
End If 
If dashseparator = 4 Then 
    hex = hex.Replace("-", "") 
    hex = Regex.Replace(hex, ".{4}", "$0-").TrimEnd("-"C) 
    Return hex 
End If 
Return hex.Replace("-", "") 
End Function 
0

ドミトリー・バイチェンコの翻訳VB.NETの翻訳:

Imports SplitValue = System.Tuple(Of String, String, String, String) 

Module Module1 

    Function DoubleToByteArray(ByVal AValue As Double) As Byte() 
     Return BitConverter.GetBytes(AValue).Reverse().ToArray() 
    End Function 

    Function SplitByteArray(ByRef AValue As Byte()) As SplitValue 
     Dim StringValue As String = String.Join("", From AByte In AValue Select AByte.ToString("X2")) 
     Return New SplitValue(StringValue.Substring(0, 4), StringValue.Substring(4, 4), StringValue.Substring(8, 4), StringValue.Substring(12, 4)) 
    End Function 

    Sub Main() 
     Dim Result As SplitValue 
     Result = SplitByteArray(DoubleToByteArray(1234.56)) 
     Console.WriteLine(Result) 
     Console.ReadLine() 
    End Sub 

End Module 

出力:

(4093, 4A3D, 70A3, D70A) 
関連する問題