[VB6]Converteren van String naar Hex, zonder verlies *

Pagina: 1
Acties:

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Ik probeer het een checksum te converteren naar Hex, welke vervolgens verzonden wordt naar een apparaat.

Dit gaat meestal goed, maar soms zit er een byte tussen die begint met 0. Bijvoorbeeld 0C of 04 etc. De complete checksum wordt dan soms verzonden als bijvoorbeeld 73B in plaats van 730B... Dit snapt de machine niet, en doet vervolgens niet. Met overige bytes gaat het wel goed, en reageerd het apparaat ook...

Wat kan ik gebruiken in plaats van...:

code:
1
Checksum = Hex(lowbyte) & Hex(highbyte)


...zodat de 0 bewaard blijft?

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Weird...

code:
1
MsgBox CStr(Hex(272) & Hex(239))


Geeft bij mij toch echt 110EF (110 en EF)

Misschien is het de CStr() functie die dat doet?

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Heel simpel... byte for byte omzetten naar hex. Als length(resultaat) < 2 dan resultaat = "0" + resultaat.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
Nope, CStr() heb ik ook gebruik van gemaakt... Een 0 valt ook niet zomaar weg, alleen als ie aan het begin van een byte staat.

Dus niet bij C0, maar wel bij 0C bijvoorbeeld...

  • Kuhlie
  • Registratie: December 2002
  • Niet online
Het is ook niet dat hij wegvalt, maar dat hij nooit gegenereerd wordt. De functie Hex maakt de resultaatstring zo lang als nodig is, niet langer. De oplossing van MUBA is de goede oplossing.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
code:
1
MyHex = Right("0" & Hex(13),2)

[ Voor 60% gewijzigd door RobIII op 24-03-2005 13:00 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Topicstarter
MUBA schreef op donderdag 24 maart 2005 @ 12:40:
Heel simpel... byte for byte omzetten naar hex. Als length(resultaat) < 2 dan resultaat = "0" + resultaat.
Ah! Simpel, en uiteraard werkt dat... Had ik zelf ook kunnen bedenken, maar op een gegeven moment ga je te moeilijk nadenken...

Zo heb ik het er ongeveer in verwerkt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  hHi = Hex(nHiByte)
  hLo = Hex(nLoByte)
  
  If Len(hHi) < 2 Then
    tHi = "0" & hHi
  Else
    tHi = hHi
  End If
  
  If Len(hLo) < 2 Then
    tLo = "0" & hLo
  Else
    tLo = hLo
  End If
  
  Checksum = tLo & tHi

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

RobIII schreef op donderdag 24 maart 2005 @ 12:45:
code:
1
MyHex = Right("0" & Hex(13),2)
Mja, wat ik dus zei maar dan nog verder geautomatiseerd :)
Mooie oplossing, moe'k onthouden!

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
KreaToh schreef op donderdag 24 maart 2005 @ 13:03:
[...]


Ah! Simpel, en uiteraard werkt dat... Had ik zelf ook kunnen bedenken, maar op een gegeven moment ga je te moeilijk nadenken...

Zo heb ik het er ongeveer in verwerkt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  hHi = Hex(nHiByte)
  hLo = Hex(nLoByte)
  
  If Len(hHi) < 2 Then
    tHi = "0" & hHi
  Else
    tHi = hHi
  End If
  
  If Len(hLo) < 2 Then
    tLo = "0" & hLo
  Else
    tLo = hLo
  End If
  
  Checksum = tLo & tHi
Dude :X
code:
1
Checksum = Right("0" & Hex(nHiByte),2) & Right("0" & Hex(nLoByte),2)

:Y)
En anders maak je een functie prefixZero ofzo:
code:
1
2
3
Private Function prefixZero(sNum As String, Optional lLen As Byte = 2) As String
    prefixZero = Right(String(lLen, "0") & sNum, lLen)
End Function

En dan aanroepen als:
code:
1
2
3
4
5
6
7
8
9
    Debug.Print prefixZero(13)
'Of:
    Debug.Print prefixZero(Hex(13))
'Of:
    Debug.Print prefixZero(Hex(13), 4)
'Of:
    Debug.Print prefixZero(1234, 4)
'Of:
    Debug.Print prefixZero(Hex(1234), 4)

En ja, ik weet dat er impliciet gecast wordt...so? ;)

[ Voor 47% gewijzigd door RobIII op 24-03-2005 17:52 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1