Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
raitl
HV veteran

liitunud: 20.01.2002
|
17.03.2016 13:59:36
Lua int->hex->char teisendus |
|
|
Hei,
probleemiks Lua integer->char teisendus. Vaja kokku panna bittidest koosnev pakett. Kasutan selleks string.char(bit1, bit2, bit3, bit4, jne) lahendust. Seni kuniks kõik algandmed ei ole suuremad kui üks bit, ei ole ka probleemi.
bit1 = 10
bit2 = 0x0F
bit3 = 254
bit4 = 0xF2
packet = string.char(bit1, bit2, bit3, bit4);
|
Paraku on tarvis toimetada ka suuremate numbritega ja siin jookseb asi rappa kuna bit ei ole enam bit vaid mitu.
bit1 = 8001
bit2 = 0x0F
bit3 = 254
bit4 = 0xF2
packet = string.char(bit1, bit2, bit3, bit4); -- ERROR
|
Esimene mõte oli, et teha integerist hex ja siis see bittideks lahutada. paraku läks see tee väga kiiresti liialt mahukaks ja tundus liialt ratta uuestileiutamisena.
Kuidas lahendaksid antud olukorra Sina?
|
|
Kommentaarid: 166 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
 |
karu
HV kasutaja
liitunud: 08.08.2002
|
17.03.2016 14:40:04
|
|
|
Need mida Sina bittideks nimetad on tegelikult baidid. Baidi väärtus on 0..255 (8bitti)
string.char teisendab baidi ASCII sümboliks, 64 -> A
Mida sa tegema pead, on jupitama numbrid suuremad kui 255 baitideks.
8001 on 0x1F41 (31*256 + 65)
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
raitl
HV veteran

liitunud: 20.01.2002
|
17.03.2016 14:45:39
|
|
|
Doh! Njah, kooliajast on liialt palju möödas.
Aga ühesõnaga jõuame ikkagi sinna tagasi et kõige lihtsam on siiski integerist hex teha ja see siis baitideks tükeldada.
|
|
Kommentaarid: 166 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
17.03.2016 14:46:04
|
|
|
Sa tahad neljast integerist kokkupanna 4 baidise "stringi", kuid vahest on mõni väärtus suurem kui üks bait (väärtus on suurem kui 255). Mida baidist ülejäävate "bittidega" teha vaja on? Kas need võib ära kaotada või peaksid need näiteks järgmise baidi väärtusesse kuidagi ülekanduma?
Sellest et sellele probleemile mõistlik lahendus välja mõelda oleks vaja teada mida see kood tegelikult tegema peab, milleks seda 4 baidist "stringi" kasutatakse?
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
raitl
HV veteran

liitunud: 20.01.2002
|
17.03.2016 14:56:38
|
|
|
Tegemist on ModBus paketi koostamisega. Ükski bit ära kaduda ei tohi. Maksimaalne ühe väärtuse suurus on kaks baiti.
Näide:
11 04 0008 0001 B298
11: The Slave Address (11 hex = address17 )
04: The Function Code 4 (read Analog Input Registers)
0008: The Data Address of the first register requested.
( 0008 hex = 8 , + 30001 offset = input register #30009 )
0001: The total number of registers requested. (read 1 register)
B298: The CRC (cyclic redundancy check) for error checking.
|
|
|
Kommentaarid: 166 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
 |
karu
HV kasutaja
liitunud: 08.08.2002
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
raitl
HV veteran

liitunud: 20.01.2002
|
17.03.2016 15:40:33
|
|
|
karu, tänud! See oli just see mida vaja.
|
|
Kommentaarid: 166 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
147 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|