hex bin dez mit hexval

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • hex bin dez mit hexval

      hallo,

      kann mir bitte jemand erklären wieso das so ist.....

      wenn ich einen rfid tag auslese, und ihn mir am display anzeige, stimmt die hex zahl verwende ich hexval stimmt der umgerechntet dezimalwert nicht.
      woran kann das liegen?

      hex:
      9D100372

      hexval:
      168294 die richtige zahl sollte aber 2635072370 lauten

      vielen dank im voraus für eure hilfe!

      flo


      On Urxc Rec_isr 'define serial receive ISR
      Enable Urxc 'enable receive isr
      Const Header = &H0AB
      'Const Cmd1 = &H01 'Read the Card Type
      Const Cmd2 = &H02 'Search Cards, and reads the cards serialnumber
      'Const Cmd3 = &H03 'Read data in The Card


      Declare Sub Read_card()
      '_______________________________________________________________________________
      '*******************************************************************************
      'Variable
      Dim Data_ptr As Byte
      Dim In_data(20)as Byte '20
      Dim Len_data As Byte At In_data(1) Overlay '1
      Dim Curcommand As Byte
      Dim Neue_daten As Bit
      Dim In_byte As Byte
      Dim Card_nr As Long At In_data(3) Overlay '3



      'Hauptprogramm
      Enable Interrupts
      Do


      Cls


      Call Read_card()
      Waitms 200
      If Neue_daten = 1 Then
      If Curcommand = In_data(2) Then 'gültiges Telegramm erhalten
      Select Case Curcommand
      Case Cmd2:
      If Len_data > 1 Then
      Locate 1 , 2 : Lcd "Card Nr :" ; Hex(card_nr) ; " " '"HEXval "
      Locate 2 , 2 : Lcd "Card Nr :" ; Hexval(card_nr) ; " "
      Select Case Card_nr



      '_______________________________________________________________________________
      '*******************************************************************************


      'Berechtigte Transponder:



      Case &H1BD624D5: ' Karte1
      Gosub Tuere_oeffnen


      ' nicht berechtigter Transponder




      Case Else:
      Gosub Falsch


      End Select


      End If
      End Select
      End If
      Neue_daten = 0
      Cls
      End If
      Loop
      End

      Sub Read_card()
      Printbin Header ; &H02 ; Cmd2
      Curcommand = Cmd2
      End Sub

      'Interrupt-Service-Routinen:
      Rec_isr:
      In_byte = Udr
      If In_byte = Header Then
      Data_ptr = 0
      Else
      Incr Data_ptr
      In_data(data_ptr) = In_byte
      If Data_ptr = In_data(1) Then Neue_daten = 1
      End If
      Return

      '*******************************************************************************
      'Unterprogramme:
    • Hallo flo,
      HexVal liest aus einem String eine hex Zahl aus. Du arbeitest aber überhaupt nicht mit Strings.
      Wenn du einfach Card_nr ausgibst, kommt das raus, was du erwartest, weil LCD oder auch Print standartmäßig die dezimale Darstellung der Variable ausgibt.
      Bedenke allerdings, dass 9D100372 für einen Long Typ eine negative Zahl ist. Du musst Card_Nr also als DWORD dimensionieren, damit das gewünschte herauskommt.
    • Franz schrieb:

      Hallo flo,
      HexVal liest aus einem String eine hex Zahl aus. Du arbeitest aber überhaupt nicht mit Strings.
      Wenn du einfach Card_nr ausgibst, kommt das raus, was du erwartest, weil LCD oder auch Print standartmäßig die dezimale Darstellung der Variable ausgibt.
      Bedenke allerdings, dass 9D100372 für einen Long Typ eine negative Zahl ist. Du musst Card_Nr also als DWORD dimensionieren, damit das gewünschte herauskommt.
      hallo franz,
      danke für deine antwort!

      wenn ich card_nr als word wimensioniere, stimmt der angezeigte hex code nicht und die dezimale kartennummer stimmt auch nicht (5 stellig anstatt 10 stellig)

      Vielen dank im voraus

      Florian
    • Du musst erst mal genau überlegen, welche Zeichen du da empfängst!

      Es werden über die Serielle folgende Daten für 9D100372 gesendet:
      157, 16, 3, 114

      9D 10 03 72 ist die Entsprechung im hexadezimalen Zahlensystem.

      Wenn du also den Integer von "9D100372" haben möchtest, musst du die Dezimalen Werte, welche du empfangen hast, mit der Wertigkeit des jeweiligen Wertes in das hex Wertesystem umrechnen.

      Hierzu die vereinfachte Schreibweise:
      (114 * (16*0)) + (3* (16*1)) + (16 * (16*2)) + (157 * (16*3))
      oder auch
      (114 * 16^0) + (3* 16^1) + (16 * 16^2) + (157 * 16^3)
      Code first, think later - Natural programmer :D
    • Hallo,

      Danke euch allen für die schnellen antworten!

      ich bin jetzt mit meinen latein bzw. schwachen programmierkentnissen am ende :( das beste lernen ist immer learning by doing

      DWORD kennt mein bascom nicht und die bascom hilfe sagt auch nichts dazu.

      das einzige was ich bräuchte ist, wenn die karte gelesen wird, dass mir die richtige nummerische (10 stellige) kartennummer angezeigt wird. mehr muss das programm nicht machen.
    • ich habe es doch oben geschrieben wie es geht...

      Empfangene Byte's:
      157, 16, 3, 114


      BASCOM-Quellcode

      1. Dim Card_Dez As DWord
      2. Dim Help_Dez As DWord
      3. Card_Dez = 0
      4. Help_Dez = Power(16, 0)
      5. Help_Dez = Help_Dez * In_data(3)
      6. Card_Dez = Card_Dez + Help_Dez
      7. Help_Dez = Power(16, 1)
      8. Help_Dez = Help_Dez * In_data(4)
      9. Card_Dez = Card_Dez + Help_Dez
      10. Help_Dez = Power(16, 2)
      11. Help_Dez = Help_Dez * In_data(5)
      12. Card_Dez = Card_Dez + Help_Dez
      13. Help_Dez = Power(16, 3)
      14. Help_Dez = Help_Dez * In_data(6)
      15. Card_Dez = Card_Dez + Help_Dez
      16. Print Card_Dez
      Alles anzeigen
      Code first, think later - Natural programmer :D
    • Falls du die Version erworben hast, solltest du mal das KOSTENFREIE! Update erledigen.
      Es macht absolut keinen Sinn, mit so einer total veralteten Version zu kompilieren.
      Ich denke aber eher, dass du eine ge-crackte Version verwendest.

      Um das abklären, bitte ich dich, mir per PN die Seriennummer zuzusenden.

      Ich werde die von Mark prüfen lassen.
      Wenn alles ok ist, helfe ich gerne weiter.

      Alles klar, erledige dein Update, dann geht es. :thumbup:

      Wir sind das "offizielle deutschsprachige BASCOM Forum", unterstützt und gehostet von MCS Elektronik.
      Leider sind so viele Raubkopien unterwegs, was nicht in unser aller Interesse sein kann.
      Die Bascom Gemeinde ist froh über kostenlose Updates und die Kosten für eine Vollversion sind durchaus erschwinglich.
      Code first, think later - Natural programmer :D