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 символа и изчислявам, от къде започват тези на конкретната координата.

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

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


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



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

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



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


--------------------
https://www.rust-lang.org/
---
https://ncase.me/trust-bg/
---
Misanthropy is the general hatred, dislike, distrust or contempt of the human species or human nature. A misanthrope or misanthropist is someone who holds such views or feelings.
---
INTJ’s are good at being very good at everything
---
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 21-08-2019, 17:51
Quote Post



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

Мнения: 1495
Регистриран на: 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



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

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



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


--------------------
https://www.rust-lang.org/
---
https://ncase.me/trust-bg/
---
Misanthropy is the general hatred, dislike, distrust or contempt of the human species or human nature. A misanthrope or misanthropist is someone who holds such views or feelings.
---
INTJ’s are good at being very good at everything
---
PMEmail PosterUsers Website
Top
Антон Яначков
Публикувано на: 21-08-2019, 21:36
Quote Post



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

Мнения: 1495
Регистриран на: 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
Ранг: Почетен член

Мнения: 16859
Регистриран на: 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,
>>>


--------------------
Не се безпокойте, всичко най-лошо тепърва предстои!
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
Ранг: Почетен член

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



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


--------------------
Не се безпокойте, всичко най-лошо тепърва предстои!
PMEmail PosterUsers Website
Top
dedal
Публикувано на: 31-08-2019, 22:00
Quote Post



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

Мнения: 114
Регистриран на: 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