2013-08-12 6 views
1

У меня проблема с моим кодом. Я помещал значение смещения в список, затем я его читал и искал в файле. Я использую следующий код.Разбор шестнадцатеричной строки стиля C#

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)

ли кто-то разум помогает :)

+4

Предоставить трассировку стека или описать проблему. К сожалению, этот сайт не реализовал широко распространенный механизм чтения разума :-) – Tarik

+0

моя проблема проста: я хочу преобразовать строку в формат & H. В примере: я получил tablica (0) = 000CFDD6, и я хочу получить & HCFDD6, но то, что я получаю, это & ​​H000CFDD6, что вызывает проблемы, когда я пытаюсь перезаписать некоторые байты позже. –

+0

@Cole "Cole9" Джонсон не мог бы вы прочитать вопрос? Его проблема заключается в том, что он получает входные данные в определенном формате и хочет преобразовать его в нужный формат. – varocarbas

ответ

0

Из ваших комментариев, я понимаю, что у вас есть следующие входы:.?

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)) 
+0

Спасибо, varocarbas. Ваш код работает и является ответом на мои проблемы и вопросы. Я также нашел решение. Я только что сделал zastępujący = Convert.ToByte (tablica (2) .ToString, 16) –

+0

@ JanBońkowski OK. Но, как сказано, если вы хотите, чтобы этот вопрос был полезен другим (и чтобы его не удаляли), вы должны написать его несколько иначе: позволить очистить входы, которые вы ожидаете (шестнадцатеричные значения как строки), и то, что вы хотите сделать. Ваши проблемы не знают, как обращаться с binaryWriter и со смещением/байтами и шестнадцатеричным форматом.Пожалуйста, объясните это лучше. – varocarbas

+0

-1 почему? Downvoter, не могли бы вы объяснить мне, что не так с моим ответом? ах! Я знаю, кто вы: pfff ... Во всяком случае. BTW (, трус,), разница между вашим (удаленным) вопросом и этим ответом заключается в том, что этот ответ дает решение для того, чего хочет OP. Если то, что хочет OP, не подходит для этого сайта, его вопрос следует удалить, но нет ничего плохого в этом ответе (который, кроме того, написан довольно типичным образом). – varocarbas

Смежные вопросы