Jump to content

Duvidas Hex


estica
 Share

Recommended Posts

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

v9XjFux.png

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.

NCDucde.png

Até pode ser algo muito simples mas já estou com os olhos em bico de olhar para isto

Edited by estica
Link to comment
Share on other sites

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

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 by Muryllo
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.