Ich verstehe, dass SizeOf()
soll verwendet werden, um mit nicht verwalteten Code zu interagieren, aber meine Frage ist, warum System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Char))
1
anstelle von 2
zurückgeben? Ich würde annehmen, dass C# char
gleichbedeutend mit unmanaged wchar_t
sein soll, das 2 Bytes groß ist. Würde das Probleme verursachen?Marshal.SizeOf (Typ t) -Funktion
5
A
Antwort
6
Von Marshal.SizeOf:
Für Zeichentypen wird die Größe der zu dieser Klasse angewendet
CharSet
Wert beeinträchtigt.
Und nach CharSet Enumeration, der Standard ist CharSet.Ansi
:
Obwohl die Common Language Runtime Standard
Auto
ist, kann Sprachen diese Standardeinstellung außer Kraft setzen. Zum Beispiel markiert C# standardmäßig alle Methoden und Typen alsAnsi
.
Zum Beispiel:
[StructLayout(LayoutKind.Sequential)]
struct A
{
char c;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct B
{
char c;
}
....
Console.WriteLine("{0} {1}", Marshal.SizeOf(typeof(A)), Marshal.SizeOf(typeof(B)));
die Ausgabe
1 2
Verwandte Themen
- 1. Marshal.SizeOf wirft Argument auf Aufzählungen
- 2. Marshal.SizeOf Struktur liefert übermäßige Anzahl
- 3. Typ 'T' ist nicht dem Typ 'T' zuweisbar
- 4. Typ ‚T‘ ist nicht awaitable
- 5. Funktion mit generischem Typ
- 6. Funktion Parameter Typ
- 7. Get "Class" -Objekt vom generischen Typ T
- 8. HashBytes() -Funktion T-SQL
- 9. bekommen Typ T von IEnumerable <T>
- 10. IQueryable OfType <T> wobei T eine Laufzeit Typ
- 11. Fehlerbehebung "Der Typparameter T versteckt den Typ T" Warnung
- 12. Ungültiger Empfängertyp [] T ([] T ist ein unbenannter Typ) Umgehung?
- 13. C# kann nicht implizit Typ T umwandeln T eingeben
- 14. Vorlage Fehler: Untyp ".. [mit T = T] ist kein Typ Name"
- 15. Generics rufen mit Typ T in Swift
- 16. Werfen Sie ein Objekt mit Typ T auf Typ T <System.Guid>
- 17. Inline-Funktion und Typ Erweiterung
- 18. Typ-Argument 'System.Net.Http.Headers.MediaTypeHeaderValue' verletzt die Einschränkung von Typ Parameter 'T'
- 19. Mismatch Typ: geschlossen Typ ist T aber kotlin.Any erwartet wurde
- 20. Lassen Sie eine Funktion, um eine `T` oder jede` FnMut (T) akzeptieren -> T`
- 21. IndexOf-Funktion in T-SQL
- 22. Schläger: implementieren Funktion (eval t)
- 23. Dynamischer Typ für Liste <T>?
- 24. Generische T in Typ C konvertieren #
- 25. Der Typ oder Namespace-Name ‚T‘ nicht
- 26. Scala Typen: Klasse A ist nicht gleich dem T wobei T: Typ T = A
- 27. Pass Typ generische Funktion und vergleichen
- 28. Template-Funktion zum Zurückgeben Vorlage Typ
- 29. Scala Generische Funktion Werte (anonyme Funktion) - Fehlender Parameter Typ (Fehler)
- 30. C++ Callback Funktion Typ
Können Sie den Code bearbeiten und hinzufügen, die die CharSet ändert und macht SizeOf() return 2? –
Komisch, ich habe gerade Joel Spolskys Beitrag zu Zeichensätzen gelesen. Guter Fang. http://www.joelonsoftware.com/articles/Unicode.html – raney
@raney, yeah, er hat viele gute Artikel über Unicode –