Tôi chuẩn bị bắt đầu làm việc với thứ gì đó đòi hỏi phải đọc byte và tạo chuỗi. Các byte được đọc đại diện cho các chuỗi UTF-16. Vì vậy, chỉ để kiểm tra những điều tôi muốn chuyển đổi một mảng byte đơn giản trong mã hóa UTF-16 thành một chuỗi. 2 byte đầu tiên trong mảng phải đại diện cho endianness và do đó phải là 0xff 0xfe hoặc 0xfe 0xff. Vì vậy, tôi đã thử tạo mảng byte của tôi như sau:Chuyển đổi ngầm ẩn của int thành byte
byte[] bytes = new byte[] {0xff, 0xfe, 0x52, 0x00, 0x6F, 0x00};
Nhưng tôi gặp lỗi vì 0xFF và 0xFE quá lớn để vừa với byte (vì byte được ký bằng Java). Chính xác hơn lỗi là int không thể được chuyển đổi thành một byte. Tôi biết rằng tôi chỉ có thể chuyển đổi một cách rõ ràng từ int sang byte với một dàn diễn viên và đạt được kết quả mong muốn, nhưng đó không phải là câu hỏi của tôi.
Chỉ cần thử một cái gì đó ra tôi tạo ra một String và được gọi là getBytes ("UTF-16") sau đó in mỗi byte trong mảng. Đầu ra hơi khó hiểu vì hai byte đầu tiên là 0xFFFFFFFE 0xFFFFFFFF, theo sau là 0x00 0x52 0x00 0x6F. (Obvisouly endianness ở đây là khác nhau từ những gì tôi đã cố gắng để tạo ra ở trên nhưng đó không phải là quan trọng).
Sử dụng đầu ra này, tôi quyết định thử và tạo ra mảng byte của tôi cùng một cách:
byte[] bytes = new byte[] {0xffffffff, 0xfffffffe, 0x52, 0x00, 0x6F, 0x00};
Điều lạ lùng là nó làm việc tốt. Vì vậy, câu hỏi của tôi là, tại sao Java cho phép một giá trị số nguyên của 0xFFFFFF80 hoặc cao hơn để được tự động chuyển đổi sang một byte mà không có một diễn viên rõ ràng, nhưng bất cứ điều gì bằng hoặc lớn hơn 0x80 yêu cầu một diễn viên rõ ràng?
Cảm ơn, điều đó làm cho nó rõ ràng hơn nhiều. – DaveJohnston