Einzelne Bytes in einen String Array speichern und vergleichen



  • @Sepp:

    Vielen Dank für die Infos. Ja, werde ich jetzt auch die Tage in Angriff nehmen. Wollte nur mal was testen. Muss mich nochmal in einen Crashcurs reinarbeiten.

    Es sind wchars, als Datentyp. Nachfolgend der gesamte Code:

    #include "stdafx.h"
    
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #include <bthdef.h>
    #include <BluetoothAPIs.h>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    #pragma comment(lib, "Irprops.lib")
    
    BLUETOOTH_FIND_RADIO_PARAMS m_bt_find_radio = {
      sizeof(BLUETOOTH_FIND_RADIO_PARAMS)
    };
    
    BLUETOOTH_RADIO_INFO m_bt_info = {
      sizeof(BLUETOOTH_RADIO_INFO),
      0,
    };
    
    BLUETOOTH_DEVICE_SEARCH_PARAMS m_search_params = {
      sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS),
      1,
      0,
      1,
      1,
      1,
      15,
      NULL
    };
    
    BLUETOOTH_DEVICE_INFO m_device_info = {
      sizeof(BLUETOOTH_DEVICE_INFO),
      0,
    };
    
    HANDLE m_radio = NULL;
    HBLUETOOTH_RADIO_FIND m_bt = NULL;
    HBLUETOOTH_DEVICE_FIND m_bt_dev = NULL;
    
    int wmain(int argc, wchar_t **args) {
      while(true) {
        m_bt = BluetoothFindFirstRadio(&m_bt_find_radio, &m_radio);
    
        int m_radio_id = 0;
        do {
          m_radio_id++;
    
          BluetoothGetRadioInfo(m_radio, &m_bt_info);
    
          wprintf(L"Radio %d:\r\n", m_radio_id);
          wprintf(L"\tName: %s\r\n", m_bt_info.szName);
          wprintf(L"\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_bt_info.address.rgBytes[1], m_bt_info.address.rgBytes[0], m_bt_info.address.rgBytes[2], m_bt_info.address.rgBytes[3], m_bt_info.address.rgBytes[4], m_bt_info.address.rgBytes[5]);
          wprintf(L"\tClass: 0x%08x\r\n", m_bt_info.ulClassofDevice);
          wprintf(L"\tManufacturer: 0x%04x\r\n", m_bt_info.manufacturer);
    
          m_search_params.hRadio = m_radio;
    
          ::ZeroMemory(&m_device_info, sizeof(BLUETOOTH_DEVICE_INFO));
          m_device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
    
          m_bt_dev = BluetoothFindFirstDevice(&m_search_params, &m_device_info);
    
    	  vector <string> macadresse;
    	  int n;
    	  int m_device_id = 0;
          do {
            m_device_id++;
    
            wprintf(L"\tDevice %d:\r\n", m_device_id);
            wprintf(L"\t\tName: %s\r\n", m_device_info.szName);
    		wprintf(L"\t\tAddress: %02x:%02x:%02x:%02x:%02x:%02x\r\n", m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5]);
            wprintf(L"\t\tClass: 0x%08x\r\n", m_device_info.ulClassofDevice);
    
    		//devicemc[m_device_id]= m_device_info.Address.rgBytes[0], m_device_info.Address.rgBytes[1], m_device_info.Address.rgBytes[2], m_device_info.Address.rgBytes[3], m_device_info.Address.rgBytes[4], m_device_info.Address.rgBytes[5];
    		macadresse.push_back(string (&m_device_info.Address.rgBytes[0], &m_device_info.Address.rgBytes[1], &m_device_info.Address.rgBytes[2], &m_device_info.Address.rgBytes[3], &m_device_info.Address.rgBytes[4], &m_device_info.Address.rgBytes[5]));
    
          } while(BluetoothFindNextDevice(m_bt_dev, &m_device_info));
    
    	  for (int k = 0; k<m_device_id; ++k){
    		  wprintf(L"\t\MAC:", devicemc[k]);
    	  }
    
    	  BluetoothFindDeviceClose(m_bt_dev);
    
        } while(BluetoothFindNextRadio(&m_bt_find_radio, &m_radio));
    
        BluetoothFindRadioClose(m_bt);
    
        Sleep(10000);
      }
    
      return 0;
    }
    

    Hilft das ?


  • Mod

    CPPNEWby123 schrieb:

    Hilft das ?

    Nein, da ich nicht weiß, was ein BLUETOOTH_DEVICE_INFO ist.

    Es sind wchars, als Datentyp.

    Dann wirst du bestimmt auch einen wstring brauchen.

    Insgesamt ist der Code mit seinen unzähligen globalen Objekten und dem vielen C mehr als ungünstig. Zum Beispiel wird dir vieles vom dem printf-Kram entweder nicht das tun, was du denkst oder grandios abstürzen. Es ist kein Zufall, dass du am Ende nichts ausgegeben bekommst, das Programm ist einfach falsch. Wie gesagt: Nicht C mit C++ mischen. Das ist keine Faustregel, sondern ganz essentiell. Es kann gar nicht funktionieren. Entweder oder.

    (Ja, jetzt kommen gleich Leute, die ein paar Ausnahmen aufzeigen, wie man C und C++ mit viel Vorsicht doch mischen kann. Frage an euch, wenn ihr so etwas schreiben wollt: Ist das wirklich ein guter Ratschlag?)



  • SeppJ schrieb:

    (Ja, jetzt kommen gleich [...]

    #include <iostream>
    #include <stdio.h>
    
    int main()
    {
    	std::string s( "Hello, C!" );
    	printf( "%s\n", s.c_str() );
    }
    

    Geht doch wunderbar!? *scnr* 🤡


  • Mod

    Swordfish schrieb:

    SeppJ schrieb:

    (Ja, jetzt kommen gleich [...]

    #include <iostream>
    #include <stdio.h>
    
    int main()
    {
    	std::string s( "Hello, C!" );
    	printf( "%s\n", s.c_str() );
    }
    

    Geht doch wunderbar!? *scnr* 🤡

    error: ‘string’ is not a member of ‘std’
    

    :p



  • Du brauchst endlich einen Standardkonformen C++-Compiler... :p



  • Swordfish schrieb:

    Du brauchst endlich einen Standardkonformen C++-Compiler... :p

    Wieso?
    Ob <iostreams> auch <string> reinholt oder nicht ist doch nicht vorgeschrieben, oder täusche ich mich da?

    Und nötig ist es mMn. nicht, sollte nichtmal nötig sein in <iostreams> ne fwd. decl von string zu haben.



  • Ja, stimmt.
    Ich schmeiß' noch ein

    #include <string>
    

    ins rennen ...



  • Irgendwie muss das doch provisorisch möglich sein ???

    Gibts hier niemanden der mir helfen kann, wie ich einfach bytereihen in einen vector speichere und dann nach einer bestimmten bytereihe suche ?

    @SeppJ: Der Code funktioniert 😉 Nur die Erweiterung mit dem Vergleich (noch) nicht so richtig 🙂


  • Mod

    CPPNEWby123 schrieb:

    Irgendwie muss das doch provisorisch möglich sein ???

    Was das? C und C++ mischen? Ja, es geht, wenn du der Superguru sowohl in C++ als auch in C bist und das Programm ganz vorsichtig konstruierst, mit dem Ziel, beide zu mischen. Provisorisch ist da gar nicht. Und ein Guru für C und C++ bist du auch nicht.

    Gibts hier niemanden der mir helfen kann, wie ich einfach bytereihen in einen vector speichere und dann nach einer bestimmten bytereihe suche ?

    Wurde dir doch gezeigt. Aber wieso suchst du nicht direkt in den Bytereihen?

    @SeppJ: Der Code funktioniert 😉 Nur die Erweiterung mit dem Vergleich (noch) nicht so richtig 🙂

    Lass mich raten: Du hast strcmp oder ähnliches benutzt?



  • CPPNEWby123 schrieb:

    Ich möchte gerne verschiedene Bytereihen in jeweilige String Arrays speichern.

    Lagerst du auch Kartoffeln im CD-Regal? Jacken im Kühlschrank? Schnitzel im Schuhschrank?



  • Es kann doch nicht sein, dass niemand weiß wie man Bytereihen in einen Vector speichert und dann mit einer weiteren Bytereihe vegleicht ?

    @Sebbj: Dafür funktioniert mein Programm hervorragend 😉 Das einzige was nicht funktioniert ist das vergleichen, der rest funkt ja!



  • CPPNEWby123 schrieb:

    Es kann doch nicht sein, dass niemand weiß wie man Bytereihen in einen Vector speichert

    Was sind in deinem Sprachgebrauch Bytereihen? Meinst du Sequenzen aus unsigned chars oder ähnliches? Dann wäre eine Bytereihe sowas wie ein std::vector<unsigned char> oder std::array<unsigned char, N>. Wie man sowas in einen vector speichert: indem du einen vector<vector<unsigned char>> nimmst. Oder "überseh" ich ein Problem von dem du uns noch nihts erzählt hast?

    und dann mit einer weiteren Bytereihe vegleicht ?

    schau mal nach den Algorithmen der Standardbibliothek. Speziell std::equal, std::lexicographical_compare


Anmelden zum Antworten