BG Development


  Reply to this topicStart new topicStart Poll

> Какво форматиране е това и как да го прочетем?, Python, HEX
cpuin
Публикувано на: 21-08-2019, 15:37
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 887
Регистриран на: 06.03.12



Здравейте,

Прикачвам файла, който съдържа HEX.
Имам таблица с координатна система със символи 16 реда, 16 колони.На всеки символ вътре отговарят 5 бита от файла.
Искам по зададени X и Y от таблицата да намеря 5те бита, които отговарят.
Аз си представям решаването така:

1.Превръщам файла в списък, където всеки бит е един запис (не мога да го постигна, тъй като не мога да делимитирам, нито по празно поле, нити по нищо)
2.По позицията на X и Y изчислявам позицията от всичките 256 символа и изчислявам, от къде започват тези на конкретната координата.

Някакви идеи?

Прикачен файл ( Брой сваляния: 53 )
Прикачен файл  all.txt


--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 21-08-2019, 16:46
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2780
Регистриран на: 21.02.18



изобщо не се разбира какво питаш


--------------------
https://www.rust-lang.org/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
Life is hard; it's harder when you're stupid.
---
Black metal is like coffee. You have to learn to drink it but when you get used to it, you just want it darker and darker
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 21-08-2019, 17:51
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 1217
Регистриран на: 27.07.16



Всеки език има стрингова функция, чрез която можеш да вземеш конкретен стринг директно, ако знаеш отстоянието му от началото. Примерно във VB това е функцията mid.
След като можеш да изчислиш точно откъде започва интересуващото те парче и знаеш дължината му, то Ти го вадиш директно със стринговата функция. Примерно:
NewStr=Mid(AllString, 1, 5)
Това ще ти даде началото на стринга започвайки от 1-ва позиция с дължина 5 символа.
Такава функция има във всеки език.
PMEmail PosterUsers Website
Top
cpuin
Публикувано на: 21-08-2019, 19:16
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 887
Регистриран на: 06.03.12



QUOTE (Gamma Goblin @ 21-08-2019, 16:46)
изобщо не се разбира какво питаш

Питам какъв е този файл, че вътре не мога да извлека битовете като нормален стринг или да го превърна в list като всяка двойка знаци е отделен елемент.
Пробвах да го извлека от файла като стринг и да махна всички бели(празни) полета, но не става, има някакви /n /f и други и празно разстояние.
За да работя с него , трябва да превърна всички символи от файла в list или normalen string поне за да мога после да ги обходя по позиции.


--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 21-08-2019, 19:36
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2780
Регистриран на: 21.02.18



Ами ако е бинарен файл ? Защо приемаш че е текстов, та да го превръщаш в стринг


--------------------
https://www.rust-lang.org/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
Life is hard; it's harder when you're stupid.
---
Black metal is like coffee. You have to learn to drink it but when you get used to it, you just want it darker and darker
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 21-08-2019, 21:36
Quote Post



Име: Антон Яначков
Група: Потребител
Ранг: Почетен член

Мнения: 1217
Регистриран на: 27.07.16



QUOTE (cpuin @ 21-08-2019, 19:16)
QUOTE (Gamma Goblin @ 21-08-2019, 16:46)
изобщо не се разбира какво питаш

Питам какъв е този файл, че вътре не мога да извлека битовете като нормален стринг или да го превърна в list като всяка двойка знаци е отделен елемент.
Пробвах да го извлека от файла като стринг и да махна всички бели(празни) полета, но не става, има някакви /n /f и други и празно разстояние.
За да работя с него , трябва да превърна всички символи от файла в list или normalen string поне за да мога после да ги обходя по позиции.

Е ти си прикачил текстов файл. Какъв ти е проблема да си го четеш като текстов файл. Имаш допълнителни символи за шпация ( 32 ) , табулации и нови редове. Замести ги с функция Replace с нищо или един единствен символ примерно * и си я карай както си знаеш.
PMEmail PosterUsers Website
Top
ici
Публикувано на: 21-08-2019, 23:08
Quote Post


Group Icon
Име: Ивайло Илчев ики
Група: VIP
Ранг: Почетен член

Мнения: 16439
Регистриран на: 06.06.04



Python 2
CODE
from __future__ import print_function

data = open('all.txt').read().translate(None, "\n\t ").decode('hex')

for i in data[0:10]:
   print(hex(ord(i)), end=",")
print()

for i in data[-10:]:
   print(hex(ord(i)), end=",")
print()


QUOTE
*** Python 2.7.16 (v2.7.16:413a49145e, Mar  4 2019, 01:30:55) [MSC v.1500 32 bit (Intel)] on win32. ***
>>>
*** Remote Interpreter Reinitialized  ***
0x0,0x0,0x0,0x0,0x0,0x3,0x5,0x3b,0x5,0x3,
0x12,0x15,0x55,0x35,0x8,0x7f,0x7f,0x7f,0x7f,0x7f,
>>>



Python 3
CODE
import codecs

data = open('all.txt').read().translate({ord(i): None for i in '\t\n '})
data = codecs.decode(data, "hex_codec")

for i in data[0:10]:
   print(hex(i), end=",")
print()

for i in data[-10:]:
   print(hex(i), end=",")
print()


QUOTE
*** Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32. ***
>>>
*** Remote Interpreter Reinitialized  ***
0x0,0x0,0x0,0x0,0x0,0x3,0x5,0x3b,0x5,0x3,
0x12,0x15,0x55,0x35,0x8,0x7f,0x7f,0x7f,0x7f,0x7f,
>>>


--------------------
Reading undefined locations provides undefined data.
PMEmail PosterUsers Website
Top
cpuin
Публикувано на: 22-08-2019, 10:23
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 887
Регистриран на: 06.03.12



QUOTE (ici @ 21-08-2019, 23:08)
Python 2
CODE
from __future__ import print_function

data = open('all.txt').read().translate(None, "\n\t ").decode('hex')

for i in data[0:10]:
   print(hex(ord(i)), end=",")
print()

for i in data[-10:]:
   print(hex(ord(i)), end=",")
print()


QUOTE
*** Python 2.7.16 (v2.7.16:413a49145e, Mar  4 2019, 01:30:55) [MSC v.1500 32 bit (Intel)] on win32. ***
>>>
*** Remote Interpreter Reinitialized  ***
0x0,0x0,0x0,0x0,0x0,0x3,0x5,0x3b,0x5,0x3,
0x12,0x15,0x55,0x35,0x8,0x7f,0x7f,0x7f,0x7f,0x7f,
>>>



Python 3
CODE
import codecs

data = open('all.txt').read().translate({ord(i): None for i in '\t\n '})
data = codecs.decode(data, "hex_codec")

for i in data[0:10]:
   print(hex(i), end=",")
print()

for i in data[-10:]:
   print(hex(i), end=",")
print()


QUOTE
*** Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 21:26:53) [MSC v.1916 32 bit (Intel)] on win32. ***
>>>
*** Remote Interpreter Reinitialized  ***
0x0,0x0,0x0,0x0,0x0,0x3,0x5,0x3b,0x5,0x3,
0x12,0x15,0x55,0x35,0x8,0x7f,0x7f,0x7f,0x7f,0x7f,
>>>

Тъкмо се чудех кой толкова учтиво помага, а после видях, че просто аватара от дяволче е сменен, мерси ICI

И аз пробвах с hex, но ето твоя код какво ми дава

File "new.py", line 3, in <module>
data = open('all.txt').read().translate(None, "\n\t ").decode('hex')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
output = binascii.a2b_hex(input)


--------------------
"Трудните неща изискват време, невъзможните - просто малко повече"
PMEmail Poster
Top
ici
Публикувано на: 22-08-2019, 10:36
Quote Post


Group Icon
Име: Ивайло Илчев ики
Група: VIP
Ранг: Почетен член

Мнения: 16439
Регистриран на: 06.06.04



open('all.txt').read().translate(None, "\n\t ") - това трябва да ти върне низ който съдържа само 16-тични цифри, четен брой. Ако има друго трябва да се филтрира с translate. По-добре translate да чете само 0-9 A-F, вместо да трие определени боклуци.


--------------------
Reading undefined locations provides undefined data.
PMEmail PosterUsers Website
Top
dedal
Публикувано на: 31-08-2019, 22:00
Quote Post



Име: Григор Колев
Група: Потребител
Ранг: Посетител

Мнения: 109
Регистриран на: 17.11.10



QUOTE (cpuin @ 21-08-2019, 15:37)
Здравейте,

Прикачвам файла, който съдържа HEX.
Имам таблица с координатна система със символи 16 реда, 16 колони.На всеки символ вътре отговарят 5 бита от файла.
Искам по зададени X и Y от таблицата да намеря 5те бита, които отговарят.
Аз си представям решаването така:

1.Превръщам файла в списък, където всеки бит е един запис (не мога да го постигна, тъй като не мога да делимитирам, нито по празно поле, нити по нищо)
2.По позицията на X и Y изчислявам позицията от всичките 256 символа и изчислявам, от къде започват тези на конкретната координата.

Някакви идеи?

Не че схванах идеята ама ако толкова искаш да го циклиш с hex просто го прочети побитово
CODE

a = open('file_name', 'rb').read().decode('hex')

После си го надроби през колкото ти сърце иска и използвай индекс.

Това мнение е било редактирано от dedal на 31-08-2019, 22:01
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0