如何改进基于十六进制的转换
How can I improve my hex-based conversion
我遇到了一个问题,我从一个换行符为(十六进制)的数据库中获取数据(字符串)0D
。我在 Textbox
中显示了这些数据,它没有使用 0D
作为 linbreak。我发现文本框需要 0D-0A
(LF 和 CR,不知道哪个是哪个)才能实际显示新行。为了解决这个问题,我想出了以下代码。
Private Function convertString(txt As String) As String
Dim data = System.Text.Encoding.Default.GetBytes(txt)
Dim hexString As String = BitConverter.ToString(data)
hexString = hexString.Replace("0D", "0D-0A")
Dim arr As [String]() = hexString.Split("-"c)
Dim array As Byte() = New Byte(arr.Length - 1) {}
For i As Integer = 0 To arr.Length - 1
array(i) = Convert.ToByte(arr(i), 16)
Next
Return System.Text.Encoding.Default.GetString(array)
End Function
Explanation/procedure:
1. 将String转成ByteArray
2. 将 ByteArray 转换为十六进制字符串(以 '-' 分隔的十六进制字符)
3.通过替换solo来添加缺失的lf或cr
4. 将十六进制字符串转换回字节数组
5. 将 ByteArray 转换回 String
现在我的问题:
我很确定有更好的方法可以做到这一点。我怎样才能简化这些代码行?
你应该可以 Replace
vbCr
和 vbCrLf
:
Dim txt = "This is a" & vbCr & "test"
Encoding.UTF8.GetBytes(txt).HexDump()
给出(HexDump
是自定义实用方法,但与问题无关):
00000000 54 68 69 73 20 69 73 20 61 0D 74 65 73 74 This is a·test
Dim txt2 = txt.Replace(vbCr, vbCrLf)
Encoding.UTF8.GetBytes(txt2).HexDump()
给出:
00000000 54 68 69 73 20 69 73 20 61 0D 0A 74 65 73 74 This is a··test
所以,你的整个方法是:
Private Function convertString(txt As String) As String
Return txt.Replace(vbCr, vbCrLf)
End Function
我遇到了一个问题,我从一个换行符为(十六进制)的数据库中获取数据(字符串)0D
。我在 Textbox
中显示了这些数据,它没有使用 0D
作为 linbreak。我发现文本框需要 0D-0A
(LF 和 CR,不知道哪个是哪个)才能实际显示新行。为了解决这个问题,我想出了以下代码。
Private Function convertString(txt As String) As String
Dim data = System.Text.Encoding.Default.GetBytes(txt)
Dim hexString As String = BitConverter.ToString(data)
hexString = hexString.Replace("0D", "0D-0A")
Dim arr As [String]() = hexString.Split("-"c)
Dim array As Byte() = New Byte(arr.Length - 1) {}
For i As Integer = 0 To arr.Length - 1
array(i) = Convert.ToByte(arr(i), 16)
Next
Return System.Text.Encoding.Default.GetString(array)
End Function
Explanation/procedure:
1. 将String转成ByteArray
2. 将 ByteArray 转换为十六进制字符串(以 '-' 分隔的十六进制字符)
3.通过替换solo来添加缺失的lf或cr
4. 将十六进制字符串转换回字节数组
5. 将 ByteArray 转换回 String
现在我的问题:
我很确定有更好的方法可以做到这一点。我怎样才能简化这些代码行?
你应该可以 Replace
vbCr
和 vbCrLf
:
Dim txt = "This is a" & vbCr & "test"
Encoding.UTF8.GetBytes(txt).HexDump()
给出(HexDump
是自定义实用方法,但与问题无关):
00000000 54 68 69 73 20 69 73 20 61 0D 74 65 73 74 This is a·test
Dim txt2 = txt.Replace(vbCr, vbCrLf)
Encoding.UTF8.GetBytes(txt2).HexDump()
给出:
00000000 54 68 69 73 20 69 73 20 61 0D 0A 74 65 73 74 This is a··test
所以,你的整个方法是:
Private Function convertString(txt As String) As String
Return txt.Replace(vbCr, vbCrLf)
End Function