Frage

Ich schreibe eine .NET-Anwendung, die mit HID-Geräten kommunizieren kann. Ich möchte in der Lage sein, abrufen und analysieren die Manufactures String aus der Geräte-Firmware. Ich weiß, dass in der hid.dll es eine Methode HidD_GetManufacturerString genannt wird. MSDN beschreibt diese Methode wie folgt:

 BOOLEAN   HidD_GetManufacturerString(
     IN HANDLE  HidDeviceObject,
     OUT PVOID  Buffer,
     IN ULONG  BufferLength
     );

Der Wrapper i für diese Methode Aussehen bin mit wie dieses ...

[DllImport("hid.dll", SetLastError = true)]
        internal static extern Boolean HidD_GetManufacturerString(
            SafeFileHandle hFile,
            Byte[] SerialNumber,
            Int32 SerianNumberLength);

Ich brauche zwei Dinge zu wissen. Erstens: Wie kann ich wissen, was Größe, um den Serial Puffer zu initialisieren? Wenn ich Operationen wie GetFeatureReport Ich weiß, was Größe, um den Puffer zu machen, weil ich die maximale Feature-Bericht Länge aus dem Gerät HidD_GetAttributes Attributen abrufen kann (); Leider ist diese Methode geben Sie mir keine Informationen von der Länge der Hersteller Zeichenfolge, die Seriennummer String, Produktname string, etc.

Die zweite Frage ist, was der richtige Weg ist, um den Byte-Array zu analysieren, die in einen String zurückgegeben wird? Ich habe versucht mit

System.Text.Encoding.ASCII.GetString(MfrBuffer)

, aber ich bekomme ein seltsames Ergebnis. Für ein Produkt manufacturered von Dell meines String sieht wie folgt aus "D \ 0e \ 0l \ 0l \ 0 \ 0 \ 0 \ 0 \ 0 ..." die "\ 0" weiter bis zum Ende des Puffers an, dass ich bestanden. Wie analysiere ich die „Dell“?

War es hilfreich?

Lösung

Es sieht aus wie „Dell“ ist zurück als Unicode-String kommt, (Sie durch das \ 0 zwischen den einzelnen Zeichen sagen kann). so würden Sie verwenden.

System.Text.Encoding.Unicode.GetString(MfrBuffer)

Wie für die Pufferlänge, Die Dokumentation für diese Funktion sagt

  

Die maximal mögliche Anzahl der Zeichen in einer eingebetteten Zeichenfolge ist gerätespezifisch. Bei USB-Geräten ist die maximale Stringlänge 126 Zeichen breit (nicht die abschließenden NULL-Zeichen einschließlich).

So sind die Puffer Bedürfnisse sein (126+1) * 2 Bytes groß.

Dann können Sie TrimEnd("\0".ToCharArray()) verwenden, um die zusätzlichen hinteren \ 0s

entfernen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top