Python Ctype ako pridat hodnotu do buffera

Python Ctype ako pridat hodnotu do buffera
« kdy: 24. 05. 2021, 14:22:26 »
Zdravim.
Mam nieco taketo
Kód: [Vybrat]
from ctypes import *
import time
from datetime import datetime
import random
from copy import *
myDataBuf = c_uint32 * 128


data = myDataBuf(
#se potrebujem napchat data zvysok je len dummy example
0x06296D6B,#5
0xF6A1822C,#6
0x5DE757FC,#7
0xD18701CB,#8
0xBCCBC569,#9
0x16F3B195,#10
0x2D341EBD,#11
0xCA3A82CA,#12
0x60476571,
0x707AE71A,#14
0x30FE1FD6,#15
0x93AF59A6,#16
0xBF55FB3A,#17
0x68AED45C,#18
0xB30026F4,#19
0x6DE5D252,#20
0x656700EE,#21
0xA2D032E2,#22
0x24E59AAB,#23
0xB1141F0C,#24
0x73F78D5A,#25
0xF72A9248,#26
0x5588B1C6,#27
0x14AB0A99,#28
0x00000000,#29
0xB24F611F,#30
0x20679C40,#31
0xF6779507,#32
0x673627C6,#33
0xC551ABAE,#34
0xBD2DCE66,#35
0x8749FF30,#36
0xB90D80B5,#37
0x70D94DA3,#38
0x111FCBA3,#39
0xC304A7A0,#40
0xCDFBE183,#41
0x9AFCBDB3,#42
0x44F8EED6,#43
0x4F277533,#44
0x9C67BAE2,#45
0x445DA080,#46
0x6158BDCF,#47
0xED973DFA,#48
0x66D8784F,#49
0x511EB574,#50
0x14CD205E,#51
0x00000000,#52
0x17FA9AC9,#53
0x6EB054EC,#54
0xE08E5907,#55
0x196AA748,#56
0xC36DC097,#57
0x01F32DC4,#58
0x06600410,#59
0xB67D8A00,#60
0x7D216FCC,#61
0x801CC79E,#62
0x1AF20C41,#63
0xB51080B1,#64
0x447F668E,#65
0x55147C4F,#66
0x1950E8AC,#67
0x6AFEBF02,#68
0x5CA5C3E5,#69
0xA0447364,#70
0xB8B4465E,#71
0x0889E8C1,#72
0x71285995,#73
0x51775419,#74
0x19F3EEC3,#75
0x954BB2F7,#76
0x8AD05795,#77
0x4C709132,#78
0x7413FF95,#79
0xF0EE116C,#80
0x67908362,#81
0x98B377D6,#82
0x8110546D,#83
0x4DF1E5BD,#84
0xD8AFB2D5,#85
0x37275093,#86
0x671FF7A0,#87
0x9CBF7442,#88
0x193832AA,#89
0x8CB33FA5,#90
0xBCA5F4E9,#91
0x14B37FBC,#92
0x54115127,
0x3F2ABDD7,#94
0xA13B465E,#95
0x5D76B260,#96
0xC6E34A8A,#97
0x9408AA04,#98
0xB6D0AB81,#99
0x9DBB9926,#100
0x14E5F865,#101
0x88D55D87,#102
0x89B777F4,#103
0x48C191B8,#104
0x7F60BC8F,#105
0x0094F2A9,#106
0x0CA650BF,#107
0xC5355FFB,#108
0x94D10C67,#109
0x2CBEB947,#110
0xBA24F337,#111
0x1E2FBBC7,#112
0x7384A8DB,#113
0x6F618370,#114
0xB4FFEA3B,#115
0xA1ECDDAB,#116
0x8FF4491B,#117
0x12C7228D,#118
0x955B7135,#119
0x57080F30,#120
0xB6FD85CF,#121
0xADFD83A4,#122
0xB4FD1FE3,#123
0xE19B49E6,#124
0x4D02DFFC,#125
0x3EE6584E,#126
0xD8749A62)#127

ako do toho myDataBuf pridam cez python novu hodnotu? Skusal som vsetko mozne ale neviem si poradit.


Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #1 kdy: 24. 05. 2021, 15:44:56 »
resp. ako pridam hex? Python ho defaultne formatuje ako string co mi nechce spapat.
Kód: [Vybrat]
d = get_random_data(8)
d = "0x" + d
d = int(d,16)
D1 = hex(d)

Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #2 kdy: 24. 05. 2021, 16:38:22 »
To jeste porad resis? Vzdit uz je to nekolik mesicu? Bylo ti davno doporuceno nastudovat praci s binarnima datama v Pythonu,
napriklad pres 'struct' knihovnu. Nechapu..

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #3 kdy: 24. 05. 2021, 17:46:42 »
Pletes si dohromady data a jejich reprezentaci

Kód: [Vybrat]
i1 = 0x0f # cislo
i2 = 15    # to same cislo
hex(i1)    # retezec
hex(i2)    # ten samy retezec

Jestlize data je pole cisel (konkretne typu c_uint32) a get_random_data() vraci cislo (v rozsahu uint32), priradis to cislo normalne do pole takto:

Kód: [Vybrat]
data[1] = get_random_data()
Zadna veda tam neni. Zadny prevod na hexadecimalni cislo se nekona, protoze hexadecimalni cislo je format pro lidi a ne pro stroj.

Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #4 kdy: 24. 05. 2021, 18:29:20 »
Ink : Dakujem to bola cesta
IDontCare : nuz zasa sa mi to dostalo na stol. toto bolo zasa nieco ine ale dakujem dostudujem si to.



Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #5 kdy: 27. 05. 2021, 09:00:10 »
este ma tak napada.
Ak mam hex tak ho konvertujem skrz int(hex_string, 16) na integer. So far so good. Problem nastane ak ho chcem napchat do toho myBuff. Proste sa odsekne 0 na zaciatku co je ok s principu pythonu. Ako to vsak vyriesit tak aby som tam tu 0 na zaciatku mal?
Teda mam
Kód: [Vybrat]
data = myDataBuf(
0x06296D6B,
data[0] = 123456[/code]
rozmyslal som nad zfill ale to je len pre string. Existuje kniznica/funkcia ktora by len spravila replace "odzadu" pre int?

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail
Re:Python Ctype ako pridat hodnotu do buffera
« Odpověď #6 kdy: 27. 05. 2021, 11:41:41 »
este ma tak napada.
Ak mam hex tak ho konvertujem skrz int(hex_string, 16) na integer. So far so good. Problem nastane ak ho chcem napchat do toho myBuff. Proste sa odsekne 0 na zaciatku co je ok s principu pythonu. Ako to vsak vyriesit tak aby som tam tu 0 na zaciatku mal?
Teda mam
Kód: [Vybrat]
data = myDataBuf(
0x06296D6B,
data[0] = 123456[/code]
rozmyslal som nad zfill ale to je len pre string. Existuje kniznica/funkcia ktora by len spravila replace "odzadu" pre int?

Porad dokola, pro retezec se to formatuje treba

Kód: [Vybrat]
"0x%08x" % 0x06296D6B
"0x{:08x}".format(0x06296D6B)

Pro ciselny typ nic takoveho nedava smysl. 010 je (v desitkove soustave, ted to neberu jako oktalovy zapis) stejna hodnota jako 10, 0010 i 000010.