如何改进基于十六进制的转换

时间:2017-05-05 13:32:50

标签: string vb.net carriage-return linefeed

我遇到了一个问题,我从数据库中获取数据(字符串),其中Linebreaks为(Hex)0D。我在Textbox中显示了这些数据,但没有使用0D作为简历。我发现文本框需要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

解释/程序
1.将字符串转换为ByteArray
2.将ByteArray转换为Hex-String(由' - '分隔的Hex-Chars)
3.通过替换单独的一个来添加丢失的lf或cr 4.将Hex-String转换回ByteArray
5.将ByteArray转换回String

现在我的问题
我很确定有更好的方法可以做到这一点。如何简化这些代码行呢?

1 个答案:

答案 0 :(得分:1)

您应该只能vbCr vbCrLf Dim txt = "This is a" & vbCr & "test" Encoding.UTF8.GetBytes(txt).HexDump() {/ 1}}

HexDump

给(Dim txt2 = txt.Replace(vbCr, vbCrLf) Encoding.UTF8.GetBytes(txt2).HexDump() 是一个自定义实用工具方法,但与问题无关):

00000000   54 68 69 73 20 69 73 20  61 0D 74 65 73 74         This is a·test  
Private Function convertString(txt As String) As String
    Return txt.Replace(vbCr, vbCrLf)
End Function

给出:

00000000   54 68 69 73 20 69 73 20  61 0D 0A 74 65 73 74      This is a··test 

所以,你的整个方法将是:

services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromDays(1);
    options.Lockout.MaxFailedAccessAttempts = 20;
});