【问题标题】:Parsing a C# style hex string [closed]解析 C# 样式的十六进制字符串 [关闭]
【发布时间】:2013-08-12 06:53:35
【问题描述】:

我的代码有问题。我将偏移值放入列表框中,然后读取它并在文件中查找它。我使用以下代码。

    Dim bw As New BinaryWriter(File.Open(filename, FileMode.Open, FileAccess.ReadWrite))
    Try
        For j As Integer = 0 To ListBox2.Items.Count - 1
            czytana = ListBox2.Items.Item(j)
            tablica = czytana.Split(" ") ' czytana is in format OFFSET: BYTE BYTE, offset is a hex addr
            tablica(0) = tablica(0).Replace(":", "") 'I remove : from "OFFSET:"
            bw.BaseStream.Seek("&H" + tablica(0), SeekOrigin.Begin) ' in ex. I got tablica(0)=000CFDD6, and I want to get &HCFDD6, but what I get is &H000CFDD6
            'some part of code in here which does its job properly
        Next j
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
    bw.Close()

问题是:我需要使用 tablica(0) 作为偏移量,使用 tablica(1) 和 tablica(2) 作为字节。我想要做的是打开文件,选择偏移量并用 tablica(2) 替换。 czytana 得到了一个格式 "tablica(0): tablica(1) tablica(2).

有人介意帮忙吗? :)

【问题讨论】:

  • 提供堆栈跟踪或描述问题。不幸的是,这个网站没有实现广泛可用的读心机制:-)
  • 我的问题很简单:我想将字符串转换为 &H 格式。例如:我得到了tablica(0)=000CFDD6,我想得到&HCFDD6,但是得到的是&H000CFDD6,这会在我稍后尝试覆盖一些字节时造成麻烦。
  • @Cole"Cole9"Johnson 你能看一下这个问题吗?他的问题是它以某种格式获取输入并希望将其转换为正确的格式
  • 为避免误解,或许您应该将此问题的标题更改为“Converting to VB.NET hex format”之类的内容。
  • &HCFDD6&H000CFDD6 应该产生完全相同的值。它们都应该产生一个 32 位整数,高 3 个 nybbles 都为 0。

标签: vb.net hex binarywriter


【解决方案1】:

根据您的 cmets,我了解到您有以下输入:

OFFSET -> tablica(0). Sample Value: 000CFDD6
BYTE to write from OFFSET -> tablica(2). Sample Value: 6F

您的代码应如下所示:

bw.BaseStream.Seek(curOffset, SeekOrigin.Begin)
bw.Write(curByte)

地点:

Dim curOffset As Long = Long.Parse(tablica(0), System.Globalization.NumberStyles.HexNumber)
'An equivalent approach would be: Dim offset As Long = Int64.Parse("&H" & tablica(0))
'Where all the zeroes after &H (and before the first non-zero character) do not matter; &H0001 is the same than &H1
Dim curByte as Byte = Byte.Parse(Integer.Parse(tablica(2), System.Globalization.NumberStyles.HexNumber))

【讨论】:

  • 谢谢你,瓦罗卡巴斯。您的代码有效,是我的问题和疑问的答案。我也找到了解决办法。我刚刚做了 zastępujący = Convert.ToByte(tablica(2).ToString, 16)
  • @JanBońkowski 好的。但如前所述,如果您希望这个问题对其他人有所帮助(并且不被删除),您应该以不同的方式编写它:让清除您期望的输入(作为字符串的十六进制值)以及您想要做什么。您的问题是不知道如何处理 binaryWriter 以及偏移量/字节和十六进制格式。请更好地解释这一点。
  • -1 为什么? Downvoter,你能解释一下我的答案有什么问题吗?啊!我知道你是谁:噗……不管怎样。顺便说一句(,胆小鬼,),您(已删除)的问题与此答案之间的区别在于,此答案为 OP 想要的内容提供了解决方案。如果 OP 想要的东西对这个网站不利,他的问题应该被删除,但这个答案没有任何问题(另外,它是以非常通用的方式编写的)。
猜你喜欢
  • 2019-08-03
  • 2020-03-22
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 2016-07-17
  • 2011-04-08
相关资源
最近更新 更多