Ir para conteúdo
Fórum Script Brasil
  • 0

[Resolvido] Criar função hexadecimal


Grandirus

Pergunta

Olá, boa tarde.

Tenho aqui uma dúvida de como criar uma função que grava 4 bytes (no caso, seriam 4 endereços hexadecimais).

Eu já possuo as "formulas" que gravam 2 e 3 bytes, porém, um dos valores necessita salvar 4 bytes.

Public Sub Save2bytes(offset, value, Location)
' -----------------------------------------------------------------------------
' Function called to save 2 Bytes, i.e. HP/MP
' -----------------------------------------------------------------------------
    Dim sval As Byte
    Dim A, B, C
    
    value = (value Mod &H10000)
    
    A = Hex(value)
    If Len(A) = 1 Then A = "000" & A
    If Len(A) = 2 Then A = "00" & A
    If Len(A) = 3 Then A = "0" & A
    
    B = ConvertHex(Left(A, 2))
    C = ConvertHex(Right(A, 2))
    
    Put #1, offset, CByte(C)
    Put #1, offset - -1, CByte(B)
    
End Sub
Public Sub Save3bytes(offset, value, Location)
' -----------------------------------------------------------------------------
' Function called to save 3 Bytes, i.e. Experience/Currency
' -----------------------------------------------------------------------------

    Dim sval As Byte
    Dim A, B, C, D
    
    value = (value Mod &H1000000)
    
    A = Hex(value)
    If Len(A) = 1 Then A = "00000" & A
    If Len(A) = 2 Then A = "0000" & A
    If Len(A) = 3 Then A = "000" & A
    If Len(A) = 4 Then A = "00" & A
    If Len(A) = 5 Then A = "0" & A
    
    B = ConvertHex(Left(A, 2))
    C = ConvertHex(Right(A, 4)) \ 256
    D = ConvertHex(Right(A, 2))
    
    Put #1, offset, CByte(D)
    Put #1, offset - -1, CByte(C)
    Put #1, offset - -2, CByte(B)
    
End Sub

Preciso saber como, baseado nessas duas funções, criar uma para 4 bytes.

Desde já agradeço.

Editado por Grandirus
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bem, já consegui a resposta e vim compartilhar. Meu irmão, que é programador, me ajudou =)

Public Sub Save4bytes(offset, value, Location)
' -----------------------------------------------------------------------------
' Function called to save 3 Bytes, i.e. Currency
' -----------------------------------------------------------------------------

    Dim sval As Byte
    Dim A, B, C, D, E
    
    value = (value Mod &H10000000)
    
    A = Hex(value)
    If Len(A) = 1 Then A = "0000000" & A
    If Len(A) = 2 Then A = "000000" & A
    If Len(A) = 3 Then A = "00000" & A
    If Len(A) = 4 Then A = "0000" & A
    If Len(A) = 5 Then A = "000" & A
    If Len(A) = 6 Then A = "00" & A
    If Len(A) = 7 Then A = "0" & A
    
    B = ConvertHex(Left(A, 2))
    C = ConvertHex(Right(Left(A, 4), 2))
    D = ConvertHex(Left(Right(A, 4), 2))
    E = ConvertHex(Right(A, 2))
    
    Put #1, offset, CByte(B)
    Put #1, offset - -1, CByte(C)
    Put #1, offset - -2, CByte(D)
    Put #1, offset - -3, CByte(E)
    
End Sub

Está ai, caso alguém precise.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá.
Queria compartilhar mais uma coisa que eu me deparei, pesquisei, e resolvi.

' Chaz Current HP
Get #FF, &H11986 + 1, HP(1)
Get #FF, &H11987 + 1, HP(2)

Dim CHPString As String
CHPString = "&H" & Hex(HP(1)) & Hex(HP(2))
txtCurHP(Memb).Text = Val(CHPString)

Nesta parte do código, ele pega os valores de HP(1) e HP(2), e faz a conversão para exibir na caixa de texto.

Se o valor obtido de HP(1) fosse 1, e HP(2) fosse 0, ao converter para Hexadecimal, DEVERIA ser 01 00, pois ele gera primeiro uma string que equivale a sequencia dos dois endereços, tipo "&H0100", que convertido equivale a 256. 256 seria exibido na caixa de texto.

PORÉM, devido ao um erro (crio eu) de formula interna do VB6 (Hex), ao se deparar com valores de dois dígitos, entre 00 e 0F (0 e 15), ele "comia" um zero, e, no caso que exemplifiquei, ao invés de "&H0100", ficaria "&H10", e mudaria de 256 (valor correto) para 16 (valor errado devido a remoção do "zero").

Eu pesquisei e encontrei uma solução que faz com que tenha sempre dois dígitos quando forem convertidos (uma linha de códigos Hexadecimal de 4 bytes seria &H00000000, mas com a conversão do VB6, teríamos somente 2 bytes e seria &H0000).

Public Function HexByte2Char(ByVal Value As Byte) As String
  ' Return a byte value as a two-digit hex string.
  HexByte2Char = IIf(Value < &H10, "0", "") & Hex$(Value)
End Function

Esta é a função que me permitiu corrigir este pequeno defeito do VB6.

Sendo assim, ficaria:

' Chaz Current HP
Get #FF, &H11986 + 1, HP(1)
Get #FF, &H11987 + 1, HP(2)

Dim CHPString As String
CHPString = "&H" & HexByte2Char(HP(1)) & HexByte2Char(HP(2))
txtCurHP(Memb).Text = Val(CHPString)

Se alguém não entendeu, ou entendeu porém achou inútil, só responder aqui.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...