【问题标题】:.NET My.Computer.Network.Ping & PadLeft.NET My.Computer.Network.Ping & PadLeft
【发布时间】:2010-12-11 09:33:38
【问题描述】:

下面的代码sn-p在最后一部分用0填充时会抛出错误,最后一部分是008、009、018、019、028、029等。 有人知道为什么吗?

Sub Main()
    Dim fixed As String = "192.168.0."
    Dim ip1, ip2 As String

    For i As Int32 = 1 To 255
        ip1 = fixed & Convert.ToString(i)
        Console.Write(ip1 & " - ")
        Try
            Console.WriteLine(My.Computer.Network.Ping(ip1))
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

        ip2 = fixed & Convert.ToString(i).PadLeft(3, "0"c)
        Console.Write(ip2 & " - ")
        Try
            Console.WriteLine(My.Computer.Network.Ping(ip2))
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    Next
End Sub

【问题讨论】:

  • Ping 请求期间发生异常。

标签: .net ping padleft


【解决方案1】:

你为什么要填充它?我认为您不需要额外的 0。

【讨论】:

  • 一位朋友给我发了一些代码,他不知道出了什么问题。我发现他在填充它,移除填充让它工作,但这让我想知道为什么这不起作用。
【解决方案2】:

我猜前导零会导致某些子系统将数字解释为八进制(旧的 C 约定)。 8 和 9 是无效的八进制数字,因此其中包含 8 和 9 的八进制值会导致错误。

【讨论】:

  • 我认为它与八进制值有关,只是不知道究竟是什么。你有关于 C 约定的更多信息吗?
  • 好收获。如果您不小心,javascript 会使用 parseInt 执行此操作。
  • Stijn:在 C 和 C++ 中,带有前导 0 的文字被解释为八进制。 int i = 012 将 i 设置为十进制 10,而不是十进制 12。我真的没有任何进一步的信息(不知道还有什么要说的!)但我确信 C 教程或参考会提供更多详细信息. (而且“约定”可能是错误的词……它实际上是语言规范的一部分,而不仅仅是“约定”——对不起!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2011-04-04
  • 1970-01-01
  • 2012-11-15
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多