Typkonvertierung von C auf Java
Ich Tat mein bestes, um Google diese aber nicht finden konnte, eine saubere Antwort in Form einer tabellarischen form, die zeigt, dass Typ-Konvertierungen.
Der Grund, ich möchte konvertieren, diese Typen, denn ich bin mit dem Android NDK aufrufen von Funktionen aus nativem code. Das problem ist, dass der native code nennt verschiedene Arten, die nicht in Java.
Habe ich eigentlich keine Erfahrung in C, und gefunden haben, diese wenigen Arten aus der Betrachtung code schnell. Bitte fühlen Sie sich frei zu Bearbeiten diesem post hinzufügen verschiedene Arten umgewandelt werden.
From C to Java
long ->
short ->
char ->
unsigned long ->
unsigned short ->
unsigned char ->
byte ->
Int8 ->
Int16 ->
Int32 ->
UInt8 ->
UInt16 ->
UInt32 ->
Auch, wenn diese nicht konvertieren kann in ein Java-Typ, erläutern Sie bitte warum.
- Android Dalvik VM ist eine 32-bit-nur VM, so dass die Umstellung sollte trivial sein. Siehe auch stackoverflow.com/a/11527544/841108
- Die signed-Typen mit vorgegebener Breite sollte die Karte zu
byte
,short
, undint
als pro das Java-Tutorial-Seite. Wie für die anderen, ein Weg, um herauszufinden, wäre zu drucken, wassizeof(long)
et al. Sie sagen, Wann Sie lief auf Ihr Zielgerät. (Die Breite C-Datentypen ist in gewissem Umfang compiler und der Architektur.) - Aber
<stdint.h>
gibt Integrale Arten von bekannter Breite für C99. - Richtig, Sie sollten die j - Typen (jint, etc) in der interface - Ebene jni-code. Und es ist bis zu C zu Anpassung an die Bedürfnisse von java, nicht die andere Weise herum.
- Das sollte wohl in allen C-code trotzdem für die Portabilität.
- könnten Sie näher erläutern was Sie bedeuten? Vielleicht nach einer anderen Antwort? Ich habe keine Ahnung, was j-Typen sind. Mein Hauptproblem ist, dass ich eine C-Bibliothek zu verwenden, in meinem Java-code zu bauen, dieses Android-Programm. Bei den Arbeitgebern anfordern, ich bin eigentlich nicht ändern, den C-code, die Sie mir gegeben haben. Ich darf zum erstellen von wrapper-Funktionen, aber nicht ändern Sie die Funktionen, die Sie bereits geschrieben haben.
- Lesen Sie einige der ndk docs und versuchen, einige der Beispiele, denken, schreiben-Wrapper entlang dieser Linien. Aber wenn der vorhandene code macht Annahmen über den Prozess Lebensdauer und der statischen Zustand in einen Konflikt mit der Android activity lifecycle und den Schwerpunkt auf Aktivitäten, anstatt procceses, kann es keine richtige Lösung innerhalb Ihrer Einschränkungen nicht zu ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese sind die äquivalenzen, in dem Bewusstsein, dass die Größe von einem primitiven Datentyp in Java ist immer die gleiche, während sich die Größe eines Datentyps in C ist teilweise compiler-und Architektur-spezifisch ist, wie bereits von @millimoose in die Kommentare.
Beachten Sie auch, dass die
char
Datentyp ist definiert als "kleinste adressierbare Einheit der Maschine enthalten können basic-Zeichensatz. Es ist ein integer-Typ. Tatsächliche Typ kann entweder mit oder ohne Vorzeichen in Abhängigkeit von der Implementierung", in der Erwägung, dass in Java ist ein 16-bit-Unicode-Zeichen.In Java gibt es keine unsigned primitiven Datentypen. Die
byte
Typ verwendet 8 bits,int
32 bitsshort
16 bits undlong
64 bit.Hier ein link der entsprechende Abschnitt in der Java-tutorial, und eine genauere Erklärung in §4.2 der Java Language Specification.
Int8
Karte zubyte
?chars
sind UCS-2-code Punkte. (Oder vielleicht UTF-16-Sequenzen.) So ist es äquivalent zu C ' swchar
. Vielleicht. Ich kann mich nie daran erinnern, wie genau man eigentlich für die Arbeit mit Unicode in plain C.müssen Sie die import-Klasse
Klasse UInt32
java.lang.Objekt
Dann können Sie einfach verwenden Uint32 und Uint16