将十六进制值字符串转换为二进制字符串

时间:2016-06-18 14:38:30

标签: vb.net visual-studio-2012

我想将000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717十六进制值转换为它的二进制格式(转换为二进制字符串),但如果任何一个值太大或太小,则代码会抛出异常。那是为什么?

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim binstring As String
        Dim hexstring As String = "000000000000000117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717"
        binstring = Convert.ToString(Convert.ToInt32(hexstring, 16), 2)

        T5.Text = binstring
    End Sub

2 个答案:

答案 0 :(得分:1)

Convert.ToInt32毫不奇怪地转换为Int32

Int32的最大值为Int32.MaxValue,即2,147,483,647。

您的代码中的数字0x117c80378b8da0e33559b5997f2ad55e2f7d18ec1975b9717远远大于(6,860,217,587,554,922,525,607,992,740,653,361,396,256,930,700,588,249,487,127十进制),因此它并不接近拟合。

修改

你没有要求帮助实际转换它,但这里有一个提示:每个十六进制数字代表四个二进制数字(因为16是2 ^ 4)。您可以单独转换十六进制的每个数字,只需将它们连接起来。换句话说,0xF1 = 11110001(二进制),因为0xF = 1111且0x1 = 0001.请注意保留所需的尾随零。

答案 1 :(得分:1)

正如我在您对您的问题的评论中所说,您的十六进制字符串太长而无法转换为32位整数,您的代码正在尝试这样做。我将通过循环遍历十六进制字符串的字符并将每个字符串转换为长度为4的二进制字符串(在左侧填充" 0")来实现此目的。

protected void onCreate(final Bundle pSavedInstanceState) {
    super.onCreate(pSavedInstanceState);
    setContentView(R.layout.activity_game);     
    getWindow().setFormat(PixelFormat.UNKNOWN);
    VideoView videoView = (VideoView)findViewById(R.id.videoView);
    Uri uri=Uri.parse("android.resource://project.game.super"+"/"+R.raw.small);
    videoView.setVideoURI(uri);
    videoView.requestFocus();
    videoView.start();
}