2012-07-18 88 views
9

Tôi đã làm hết sức mình với Google nhưng không thể tìm thấy câu trả lời rõ ràng trong biểu mẫu dạng bảng hiển thị các chuyển đổi loại.Loại Chuyển đổi từ C sang Java

Lý do tôi muốn chuyển đổi các loại này là vì tôi đang sử dụng NDK của Android để gọi các hàm từ mã gốc. Vấn đề là mã nguồn gốc gọi các kiểu khác nhau không tồn tại trong Java.

Tôi thực sự không có kinh nghiệm về C và đã tìm thấy một số loại này khi xem mã nhanh chóng. Vui lòng chỉnh sửa bài đăng này để thêm các loại khác nhau cần được chuyển đổi.

From C to Java 

long -> 

short -> 

char -> 

unsigned long -> 

unsigned short -> 

unsigned char -> 

byte -> 

Int8 -> 

Int16 -> 

Int32 -> 

UInt8 -> 

UInt16 -> 

UInt32 -> 

Ngoài ra, nếu bất kỳ loại nào trong số này không thể chuyển đổi thành loại Java, vui lòng giải thích lý do.

+0

Android Dalvik VM là 32 bit chỉ VM, do đó, việc chuyển đổi sẽ là tầm thường. Xem thêm http://stackoverflow.com/a/11527544/841108 –

+0

Các loại đã ký với chiều rộng được chỉ định sẽ ánh xạ thành 'byte',' short' và 'int' theo [trang Hướng dẫn Java] này (http: // docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html). Đối với những người khác, một cách để tìm ra sẽ là in ra những gì 'sizeof (long)' et al. cho bạn biết khi nào chạy trên thiết bị đích của bạn. (Độ rộng của các kiểu dữ liệu C là ở một mức độ nào đó cụ thể về trình biên dịch và kiến ​​trúc.) – millimoose

+0

Nhưng '' cung cấp các loại không thể tách rời của chiều rộng đã biết cho C99. –

Trả lời

7

Đây là những điểm tương đương, lưu ý rằng kích thước của kiểu dữ liệu nguyên thủy trong Java luôn giống nhau, trong khi kích thước của kiểu dữ liệu trong C ở mức độ nào đó của trình biên dịch và kiến ​​trúc cụ thể, @millimoose trong các ý kiến.

Ngoài ra, lưu ý rằng char loại dữ liệu là defined là "đơn vị địa chỉ nhỏ nhất của máy có thể chứa bộ ký tự cơ bản. Đây là một loại số nguyên. Loại thực tế có thể được ký hoặc không dấu tùy thuộc vào việc triển khai" trong Java là một ký tự Unicode 16 bit.

long -> long 
short -> short 
char -> char 
unsigned long -> N/A 
unsigned short -> N/A 
unsigned char -> N/A 
byte -> byte 
Int8 -> byte 
Int16 -> short 
Int32 -> int 
UInt8 -> N/A 
UInt16 -> N/A 
UInt32 -> N/A 

Trong Java không có loại dữ liệu nguyên thủy chưa ký. Loại byte sử dụng 8 bit, int 32 bit, short 16 bit và long 64 bit.

Dưới đây là một link đến phần có liên quan trong hướng dẫn Java và giải thích chi tiết hơn trong section §4.2 của Java Language Specification.

+0

Tại sao một số trong số này là N/A? – JuiCe

+0

@JuiCe Java không hỗ trợ các loại chưa ký. Tùy thuộc vào những gì bạn cần làm, bạn cần phải chuyển đổi sang loại ký tên lớn hơn (để tính toán) hoặc loại đã ký (khi điều quan trọng là giữ cùng một mẫu bit) – millimoose

+0

@JuiCe Điều đó có nghĩa là Java không có một loại tương đương. –

-1

bạn cần phải nhập khẩu lớp

Lớp UInt32

java.lang.Object

Và sau đó bạn có thể sử dụng đơn giản uint32 và uint16

Các vấn đề liên quan