Avatar billede Slettet bruger
11. november 2003 - 00:01 Der er 10 kommentarer og
2 løsninger

Fra decimal-værdi til hex-værdi…

Hej X-perter!

Har brug for lidt hjælp til noget kode i VB!

Jeg skal behandle data som kommer ind på COM1

Ud fra det input jeg får fra COM1 skal programmet udføre noget kode, og smide resultatet på COM2

Dataene fra COM1 kan antage værdier mellem 1-64
For eksempel ”P001M” ”P002M” ”P003M” ... ”P064M”

Strengen kontrolleres med følgende kode:

If Left(Temp, 2) = "P0" And (Mid(Temp, 5, 1) = "M") Then   
            K = Val(Mid(Temp, 3, 2))                             
            If K < 11 Then
                IO2.WriteString (Chr$(2) & "GC7:903000" & K - 1 & Chr$(3))
            End If

Når strengen fra COM1 er kontrolleret, skal der smides data til COM2 svarende til det tal som er fundet i strengen!

Det virker fint så længe værdierne ligger mellem 1-10, da de direkte kan indsættes i strenge som sendes videre til COM2

Når værdien ligger mellem 11-16 skal værdierne i stedet hedde A,B,C,D,E,F (altså hex-værdier!)
Fra 17 til 26 skal værdierne hedder 10,11,12,13 osv.
og jeg kan ikke længere direkte bruge det tal jeg fandt i strengen fra COM1...

Jeg kan godt løse det med end select case sætning:

Eksempel:
Select Case K
                Case Is = 11
                    IO2.WriteString (Chr$(2) & "GC7:903000A" & Chr$(3))
End Select

men der skal mange sætninger til, og det virker som lidt ”tung” kode.

Her ses samtlige 64 muligheder.
Problemet opstår ved værdierne 11-64

Streng:    Kode:        Streng:    Kode:
1    000        33    020
2    001        34    021
3    002        35    022
4    003        36    023
5    004        37    024
6    005        38    025
7    006        39    026
8    007        40    027
9    008        41    028
10    009        42    029
11    00A        43    02A
12    00B        44    02B
13    00C        45    02C
14    00D        46    02D
15    00E        47    02E
16    00F        48    02F
17    010        49    030
18    011        50    031
19    012        51    032
20    013        52    033
21    014        53    034
22    015        54    035
23    016        55    036
24    017        56    037
25    018        57    038
26    019        58    039
27    01A        59    03A
28    01B        60    03B
29    01C        61    03C
30    01D        62    03D
31    01E        63    03E
32    01F        64    03F

Er der en eller anden genial måde at gøre det på?
Avatar billede Slettet bruger
11. november 2003 - 00:04 #1
Kolonne-opstillingen blev ikke så pæn - skulle have set sådan ud:

Streng:  Kode:  Streng:    Kode:
1        000    33          020

osv..
Avatar billede medions Nybegynder
11. november 2003 - 00:04 #2
¨Du gør blot sådan her:

strHexVaerdi = Hex(Val(Decimalvaerdi.Txt))

//>Rune
Avatar billede Slettet bruger
11. november 2003 - 00:04 #3
...arh.. det er noget ged... håber I forstår meningen :-)
Avatar billede Slettet bruger
11. november 2003 - 00:05 #4
//medions

Det var godt nok tjep svar :-) :-)

Hvor vil du indsætte den i koden?

If Left(Temp, 2) = "P0" And (Mid(Temp, 5, 1) = "M") Then   
            K = Val(Mid(Temp, 3, 2))                             
            If K < 11 Then
                IO2.WriteString (Chr$(2) & "GC7:903000" & K - 1 & Chr$(3))
            End If

//steyr
Avatar billede kabbak Professor
11. november 2003 - 00:13 #5
steyr > din liste med oversættelse af decimal til hex er forkert

decimal 32 er hex 20
Avatar billede kabbak Professor
11. november 2003 - 00:18 #6
IO2.WriteString (Chr$(2) & "GC7:903000" & hex(K - 1) & Chr$(3))
Avatar billede Slettet bruger
11. november 2003 - 00:19 #7
//kabbak

Ja den stemmer ikke helt overens med virkeligheden...
Men i protokollen for kameraet (det er det som sidder på COM2)
står følgende

Kommando: 9030000    = Preset 1
Kommando: 9030001    = Preset 2
....
....
Kommando: 903003E    = Preset 63
Kommando: 903003F    = Preset 64

Så den er hele tiden en "bagefter"
Avatar billede kabbak Professor
11. november 2003 - 00:24 #8
If Left(Temp, 2) = "P0" And (Mid(Temp, 5, 1) = "M") Then   
            K = Val(Mid(Temp, 3, 2))                             
            IO2.WriteString (Chr$(2) & "GC7:903000" & hex(K - 1) & Chr$(3))
end if
Avatar billede kabbak Professor
11. november 2003 - 00:25 #9
end if

er slut på

If Left(Temp, 2) = "P0" And (Mid(Temp, 5, 1) = "M") Then
Avatar billede Slettet bruger
11. november 2003 - 00:32 #10
//kabbak & medions... i er geniale...

Det virker perfekt! :-)

kabbak -> smid lige et svar så du kan få del i pointene... ;-)
Avatar billede kabbak Professor
11. november 2003 - 09:00 #11
hej og et svar.
Avatar billede Slettet bruger
11. november 2003 - 10:20 #12
Lukketid + uddeling af point.. :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester