mac address to bytearray umwandeln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

ich habe ein mac Adresse C4:A0:53:A4:5C:41

möchte es in byte-array umwandeln. habe mit diesem code versucht

import binascii

Code: Alles auswählen

mcbyt = binascii.unhexlify(mac_address.replace(":", ""))
print(mcbyt)
output : b'\xc4\xa0S\xa4\\A'

möchte es in einem 6 byte array haben. gibt es noch andere möglichkeiten ?

danke im voraus
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist ein bytes-Objekt der Länge 6. Das ist nur die Darstellung.
Variablennamen sollten nicht kryptisch abgekürzt werden, mcbyt soll wohl mac_address_as_bytes heißen.
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

`bytes` hat dafür eine Methode — man braucht da kein Modul für importieren:

Code: Alles auswählen

In [339]: bytes.fromhex("C4:A0:53:A4:5C:41".replace(":", ""))
Out[339]: b'\xc4\xa0S\xa4\\A'

In [340]: type(bytes.fromhex("C4:A0:53:A4:5C:41".replace(":", "")))
Out[340]: bytes

In [341]: len(bytes.fromhex("C4:A0:53:A4:5C:41".replace(":", "")))
Out[341]: 6
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

danke für die Antwort.
das habe ich bereit versucht.
ich möchte es in einem Bytearray bekommen, sodass die macaddresse so ausgibt um mit Bluetooth gerät Verbindung herzustellen {(b'196', b'160', b'83', b'164', b'92', b'65')}

ich habe mit dem code versucht bekomme leider kein byte-Array

Code: Alles auswählen

hex_list = mac_address.split(":")
dec_list = [int(x, base=16) for x in hex_list]
byte_list = [chr(x) for x in dec_list]
byte_string = "".join(byte_list)
key = bytearray(byte_string, 'utf-16')
bin über jegliche hilfe sehr dankbar
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Modjteba: Du versucht ein Problem zu lösen das es nicht gibt. `bytes` und `bytearray` sind hier ziemlich sicher austauschbar. Und falls nicht, dann ersetze halt einfach `bytes` im bisherigen Beispiel durch `bytearray`:

Code: Alles auswählen

In [349]: bytearray.fromhex("C4:A0:53:A4:5C:41".replace(":", ""))
Out[349]: bytearray(b'\xc4\xa0S\xa4\\A')
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

@__blackjack__ danke für rückmeldung.

ich habe beides schon versucht bekomme gleichen output.

um mit dem Bluetooth gerät verbindung herzustellen muss ich die MacAdresse in bytes array format umwandeln.
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Modjteba: Du hast da ein Bytearray. Also kann es daran eher nicht liegen. Wie sieht denn die API aus? Und die Fehlermeldung?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

ich habe Bluetooth Low Energy als Api.

also das gerät https://www.mantracourt.com/products/wi ... -oem-board hat ein Dll Datai, welches die quell-code in C# geschrieben ist.

in Dll ist ein funktion welches verbindung mit dem gerät herstellt. dazu braucht er bytes array format.

und wenn ich die umgewandelte bytearray in funktion eingeb, bekomme ich funktionfehler.

habe jedoch eine verbindung über bluetooth name mit dem selben funktion hergestellt.

ich versuche jetzt messdaten auszulesen.
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wie sieht denn die Funktionssignatur aus? Und was für ein Fehler? Wenn die selbe Funktion mit dem Namen funktioniert, wie sieht denn *der* Aufruf aus? Geht das mit *der* Funktion überhaupt mit einer MAC-Adresse?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
imonbln
User
Beiträge: 187
Registriert: Freitag 3. Dezember 2021, 17:07

Bis jetzt sind, die Informationen, die du lieferst, nicht wirklich hilfreich, um dein Problem zu verstehen.
Das, was du hast, ist ein Python Bytearray, also genau das, was du haben willst. Auf der anderen Seite gibt es laut deiner Erklärung eine C#-DLL, die sicher keine Python Bytearrays haben will. Wie die C#-DLL und dein Python Interpreter interagieren, lässt du leider aus. Aber genau dieser Teil ist wichtig, um zu verstehen, was dein Problem ist.
Vermutlich wirst du mit dem struct Module dir da irgendwas zusammen kleben können, damit deine DLL den Datenstrom versteht oder aber deine DLL hat schon ein Python binding, welches es automatisch macht. Du siehst ohne die entscheiden Information wie beide Welten verbunden sind, ist es nur raten und es wird schwer dir was zu empfehlen.
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

__blackjack__ hat geschrieben: Mittwoch 6. September 2023, 17:15 Wie sieht denn die Funktionssignatur aus? Und was für ein Fehler? Wenn die selbe Funktion mit dem Namen funktioniert, wie sieht denn *der* Aufruf aus? Geht das mit *der* Funktion überhaupt mit einer MAC-Adresse?

vorab vielen dank für Antworten.
hier sind Dll funktion mit 2 methoden. und den quell code. https://imgur.com/a/eO91RQW
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

imonbln hat geschrieben: Mittwoch 6. September 2023, 17:17 Bis jetzt sind, die Informationen, die du lieferst, nicht wirklich hilfreich, um dein Problem zu verstehen.
Das, was du hast, ist ein Python Bytearray, also genau das, was du haben willst. Auf der anderen Seite gibt es laut deiner Erklärung eine C#-DLL, die sicher keine Python Bytearrays haben will. Wie die C#-DLL und dein Python Interpreter interagieren, lässt du leider aus. Aber genau dieser Teil ist wichtig, um zu verstehen, was dein Problem ist.
Vermutlich wirst du mit dem struct Module dir da irgendwas zusammen kleben können, damit deine DLL den Datenstrom versteht oder aber deine DLL hat schon ein Python binding, welches es automatisch macht. Du siehst ohne die entscheiden Information wie beide Welten verbunden sind, ist es nur raten und es wird schwer dir was zu empfehlen.

ie DLL-datai ist mit clr.Addreference an mein python code gebunden.

wie bekomme ich raus wie mein python interperter und die Dll interagieren ?

danke im voraus
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt kommst Du endlich mit der Sprache raus. Text muß man nicht als Bild posten, das macht es nur allen schwieriger Dir zu helfen.

Mein google ist so gut wie Dein google:

Code: Alles auswählen

from System import Byte, Array

mac_address = "C4:A0:53:A4:5C:41"
address = bytes.fromhex(mac_address.replace(":", ""))
address_for_dotnet = Array[Byte](address)
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

Sirius3 hat geschrieben: Donnerstag 7. September 2023, 08:20 Jetzt kommst Du endlich mit der Sprache raus. Text muß man nicht als Bild posten, das macht es nur allen schwieriger Dir zu helfen.

Mein google ist so gut wie Dein google:

Code: Alles auswählen

from System import Byte, Array

mac_address = "C4:A0:53:A4:5C:41"
address = bytes.fromhex(mac_address.replace(":", ""))
address_for_dotnet = Array[Byte](address)

Vielen Dank.

wenn ich den Code ausführe bekomme ich als output : system.Byte[ ]

was mir auch auffällt bei Import von System wird rot gestrichen.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo bekommst Du den Output? Beim Aufruf der Funktion `connect`? Da sollte eigentlich ein bool zurückgegeben werden.
Modjteba
User
Beiträge: 18
Registriert: Donnerstag 3. August 2023, 11:12

vorm auf ruf der funktion , wollte ich mir den wert von address_for_dotnet anzeigen lassen, wo ich diesen output bekommen habe : system.Byte[ ]

und beim aufruf von Funktion bekomme ich False zurück.
Benutzeravatar
__blackjack__
User
Beiträge: 13937
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Modjteba: "system.Byte[ ]" ist halt die Zeichenkettendarstellung von so einem .NET Byte-Array.

Code: Alles auswählen

In [361]: from System import Array, Byte

In [362]: ba = Array[Byte](bytes([1, 2,3]))

In [363]: ba
Out[363]: <System.Byte[] object at 0x7ff21a4ad1c0>

In [364]: print(ba)
System.Byte[]

In [365]: ba[0]
Out[365]: 1

In [366]: ba[1]
Out[366]: 2

In [367]: ba[2]
Out[367]: 3

In [368]: len(ba)
Out[368]: 3
Gibt die API nicht irgendwo mehr Informationen als True und False‽
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten