estica Posted January 6, 2016 at 10:46 PM Report Share #591518 Posted January 6, 2016 at 10:46 PM (edited) Boa noite e desde já obrigado por todas as ajudas quem me têm dado. Tenho aprendido bastante com a comunidade Portugal a Programar. Surgiu-me mais uma duvida. Eu estou a ler o HEX de um ficheiro. E estou a carregar duas informações O meu código vai carregar o HEX e apresentar em Decimal... Basicamente é isto Using b As New System.IO.BinaryReader(System.IO.File.Open((fileDialogBox.FileName), System.IO.FileMode.Open)) For i As Long = 4668262 To 4958285 - 1 Step 456 b.BaseStream.Seek(i, System.IO.SeekOrigin.Begin) Dim Temp As String = b.ReadUInt32 Dim lvi As ListViewItem = ListView1.Items.Add(Temp) lvi.SubItems.AddRange(New String() {"", ""}) ItemCounter += 1 Next End Using Agora para gravar esta informação é que estou lixado... Só sei gravar em Decimal... E precisava de voltar a gravar em HEX depois da leitura em decimal e de editar em decimal... Para gravar uso este código... Mas vai gravar a informação de forma errada... Using fs As New IO.FileStream(fileDialogBox.FileName, FileMode.Open, FileAccess.ReadWrite) Dim loc As Integer = &H473B6C For Each Item In ListView1.Items fs.Position = loc Dim byteArray() As Byte = System.Text.ASCIIEncoding.UTF8.GetBytes(Item.SubItems(1).Text) fs.Write(zerarN, 0, zerarN.Length) fs.Position = loc fs.Write(byteArray, 0, byteArray.Length) loc += &H1C8 Next End Using Ou seja, vai ler o HEX 1D e converter em 29 neste caso... E ao gravar vai gravar os 29 mas de forma errada como podem ver na imagem... Em vez de converter os 29 em HEX e gravar do lado esquerdo vai gravar os 29 do lado direito. Até pode ser algo muito simples mas já estou com os olhos em bico de olhar para isto Edited January 6, 2016 at 10:47 PM by estica Link to comment Share on other sites More sharing options...
informaster Posted January 6, 2016 at 11:22 PM Report Share #591525 Posted January 6, 2016 at 11:22 PM Boas Olha eu não sou muito programador activo. Mas posso te dizer que na programação que tens verifica no codigo que fizeste as string que mandas para ficheiro. Ou seja na programação deves converter os valores antes de fazer build ao ficheiro. https://msdn.microsoft.com/en-us/library/963zt96e%28v=vs.90%29.aspx http://www.xtremedotnettalk.com/general/86681-vb-net-convert-decimal-hex-binary.html vê esses links. Nuno Revez @informaster Link to comment Share on other sites More sharing options...
Muryllo Posted January 7, 2016 at 01:02 PM Report Share #591552 Posted January 7, 2016 at 01:02 PM (edited) Bom dia, Estica, usa a classe BufferedStream, é melhor que BinaryReader ao meu ver. Meu conselho é criar em funções separadas cada etapa do processo que estás a fazer. Primeiro a função de offSet na matriz binária, precisas receber a index de onde começar a modificar e quando parar de forma síncrona e respectivamente igual a index que recebeste, depois cria a função que começa a escrever um Matriz X() a partir do primeiro item da Index da outra matriz binária, a do arquivo. Vê se consegue pegar a ideia, e em relação a 29 não virar hexadecimal está bem estranho ... Eu uso o método WriteByte de BufferedStream. Dim X As Byte 'MEU BYTE ... = 29 Using Stream As New BufferedStream(File.Open("C:\bootpart.sys", FileMode.Open, FileAccess.ReadWrite), 1024) Stream.WriteByte(X) End Using E se você estiver recebendo outro valor sem ser 1D de 29 é porque ou escreveu ele em forma de string no arquivo fazendo com que ele interprete o seu byte como uma string e consequentemente indexando cada byte que representa um Int 32 Bits ou então porque está a usar o método errado. Esquece Write e usa WriteByte de BufferedStream. Em BufferedStream você pode definir seu buffer e sem carregar o arquivo inteiro na memória física. Fica meu conselho. 50 é o byte que representa o número 2 na tabela ASCII 57 é o byte que representa o número 9 na tabela ASCII Por isso na tabela ali em cima ele representa dois novos bytes 50 em hexadecimal é 32 57 em hexadecimal é 39 Abraços 😄 Edited January 7, 2016 at 01:15 PM by Muryllo Link to comment Share on other sites More sharing options...
estica Posted January 7, 2016 at 05:22 PM Author Report Share #591594 Posted January 7, 2016 at 05:22 PM Amigo Muryllo eu não percebi muito bem a sua explicação... Enviei PM para você. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now