Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Lua int->hex->char teisendus märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2016 13:59:36 Lua int->hex->char teisendus vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
karu
HV kasutaja

liitunud: 08.08.2002




sõnum 17.03.2016 14:40:04 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2016 14:45:39 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 17.03.2016 14:46:04 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2016 14:56:38 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
karu
HV kasutaja

liitunud: 08.08.2002




sõnum 17.03.2016 15:16:29 vasta tsitaadiga

raitl kirjutas:
Tegemist on ModBus paketi koostamisega. Ükski bit ära kaduda ei tohi. Maksimaalne ühe väärtuse suurus on kaks baiti.

seega numbrid on kas 8bit või 16bit suured ja sa tead täpselt mis järjestuse need esinevad.

visates märksõnad googlesse,
http://stackoverflow.com/questions/29175209/lua-working-with-bit32-library-to-change-states-of-i-os

funktsioon mis vaja on:
local function toTwoByte(value)
    return string.char(floor(value / 256), value % 256)
end
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
raitl
HV veteran


liitunud: 20.01.2002



Autoriseeritud ID-kaardiga

sõnum 17.03.2016 15:40:33 vasta tsitaadiga

karu, tänud! See oli just see mida vaja. thumbs_up.gif
Kommentaarid: 166 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 147
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Lua int->hex->char teisendus
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.