在Vb.net中将十六进制转换为值[对于Torrent跟踪器]

时间:2012-11-20 11:36:18

标签: vb.net tracker

我基本上试图实现这个目标:how to get the peers from an torrent tracker

我被困在这里:

  

不仅如此,您还必须将哈希的实际值作为GET参数发送。 “76a36f1d11c72eb5663eeb4cf31e351321efa3a3”是散列的十六进制表示,但跟踪器协议指定您需要发送散列值(= bytestring)。因此,您必须首先解码十六进制表示,然后对其进行URL编码:urllib.urlencode([('info_hash','76a36f1d11c72eb5663eeb4cf31e351321efa3a3'.decode('hex'))])=='info_hash = v%A3o%1D%11 %C7。%B5f%3E%EBL%F3%1E5%13%21%EF%A3%A3'#在Python中。

我已经研究了很多,由于我的新编码技巧,我无法在vb.net中做到以下几点。有人可以赐教我吗?

我需要做同样的事情: 从十六进制表示转换为哈希的bytestring值。

提前致谢

1 个答案:

答案 0 :(得分:0)

我很惊讶没有更简单的方法将十六进制字符串转换为字节数组,但我没有快速找到一个,所以这里很难:

  Dim hex As String = "76a36f1d11c72eb5663eeb4cf31e351321efa3a3"

  'prepend leading zero if needed
  If hex.Length Mod 2 <> 0 Then
     hex = " " & hex
  End If


  Dim bytes As Byte() = New Byte((hex.Length \ 2) - 1) {}
  For byteNum As Int32 = 0 To bytes.Length - 1

     bytes(byteNum) = Byte.Parse(hex.Substring(byteNum * 2, 2), 
           Globalization.NumberStyles.AllowHexSpecifier)

  Next

  'convert to an ansi string and escape
  Dim final As String =Uri.EscapeDataString( 
        System.Text.Encoding.Default.GetString(bytes))