Hallo,
folgender Codeschnippsel funktioniert unter Visual C++ einwandfrei, jedoch nicht unter Linux:
wchar_t serial[9];
IowKitGetSerialNumber(lsDevs, serial);
sprintf(id, "%ls", serial);
fprintf(stderr, "iowarrior with serial %s found\n", id);
Als Ergebnis erhalte ich immer Müll.
Zur Erklärung für wchar_t : dieser Typ ist sowohl unter Visual C++ als auch gcc verfügbar. Deshalb verwende ich es anstatt unsigned short.
Hat jemand ein Codebeispiel in C++, das unter Linux läuft?
Danke,
Matthias
Seriennummer unter Linux und C++ ausgeben
Moderator: Guido Körber
Re: Seriennummer unter Linux und C++ ausgeben
Hallo hiasl,
LinuxSDK/libiowkit-1.5.0/tests/iowkittest.c
(Hier sind fast alle wichtigen Funktionen einmal vorgeführt)
Das ist natürlich viel zu kompliziert, aber leider nicht zu umgehen.
Am besten würde die IowkIt-Lib intern die Serienummer direkt in einen
unsigned 32bit Wert umwandeln. Aber irgendwer hat sich das mal vor langer Zeit so ausgedacht :-(
Eberhard
Unter Linux (GNU) ist wchar_t 32 bit breit. Für Windows weiß ich es nicht schätze aber dort sind es nur 16 bit.hiasl wrote: Zur Erklärung für wchar_t : dieser Typ ist sowohl unter Visual C++ als auch gcc verfügbar.
Geht in diesem Fall leider nichtDeshalb verwende ich es anstatt unsigned short.
Das folgende ist aus der DateiHat jemand ein Codebeispiel in C++, das unter Linux läuft?
LinuxSDK/libiowkit-1.5.0/tests/iowkittest.c
(Hier sind fast alle wichtigen Funktionen einmal vorgeführt)
Code: Select all
unsigned short sn[9];
char snt[9];
iows[i] = IowKitGetDeviceHandle(i + 1);
// Get serial number
IowKitGetSerialNumber(iows[i], sn);
pid = IowKitGetProductId(iows[i]);
for (j = 0; j < 9; j++)
snt[j] = sn[j];
printf("%d PID %x, S/N "%s"\n", i + 1, (unsigned int) pid, snt);
Am besten würde die IowkIt-Lib intern die Serienummer direkt in einen
unsigned 32bit Wert umwandeln. Aber irgendwer hat sich das mal vor langer Zeit so ausgedacht :-(
Eberhard
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Ich wars nicht. Das naechste API wird die Seriennummer deshalb in allen Varianten anbieten. ASCI string, Unicode string und Zahl.
Das Problem scheint aber geloest, daher mache ich heute keine Experimente mehr.
Ich habe mich gefragt warum wchar_t 32 Bit ist, aber dann habe ich eben auf linux-usb-devel eine Message dazu gelesen. wchar_ soll einen Unicode Character aufnehmen koennen und die koennen nun mal mehr als 16 Bit haben. USB nutzt wohl nur UCS-2 und setzt daher 16 Bit Chars voraus.
Unicode ist sehr verwinkelt und viele Implementierungen sind buggy. Nicht zuletzt haben die meisten Programmierer (einschliesslich mir) nur oberflaechliches Wissen zu Unicode.
Das Problem scheint aber geloest, daher mache ich heute keine Experimente mehr.
Ich habe mich gefragt warum wchar_t 32 Bit ist, aber dann habe ich eben auf linux-usb-devel eine Message dazu gelesen. wchar_ soll einen Unicode Character aufnehmen koennen und die koennen nun mal mehr als 16 Bit haben. USB nutzt wohl nur UCS-2 und setzt daher 16 Bit Chars voraus.
Unicode ist sehr verwinkelt und viele Implementierungen sind buggy. Nicht zuletzt haben die meisten Programmierer (einschliesslich mir) nur oberflaechliches Wissen zu Unicode.
Last edited by Robert Marquardt on Thu Jun 07, 2007 10:13 am, edited 1 time in total.