لماذا byteArray يكون بطول 22 بدلا من 20؟
سؤال
ونحن نحاول تحويل من سلسلة لByte[]
باستخدام جافا البرمجية التالية:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
ونحصل على مجموعة بايت طول 22 بايت، لسنا متأكدين من أين يأتي هذا الحشو من. كيف يمكنني الحصول على مجموعة من طول 20؟
المحلول
الكسندر الجواب السبب في أنه من هناك، ولكن ليس في كيفية تخلص منه. تحتاج ببساطة لتحديد endianness التي تريدها في اسم ترميز:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
نصائح أخرى
قد يكون بايت الأولين هي بايت علامة ترتيب . وهي تحدد ترتيب بايت في كل كلمة 16 بت المستخدمة في الترميز.
وحاول الطباعة من وحدات البايت في عرافة لنرى أين يتم إضافة 2 بايت إضافية - هم في بداية أو نهاية
وأنا قطف أن عليك أن تجد ترتيب بايت علامة في بداية (0xFEFF ) - وهذا يسمح لأي شخص المستهلكة (استقبال) صفيف بايت للاعتراف ما إذا كان الترميز هو endian طفيف أو endian كبيرة
وUTF لديه علامة ترتيب البايت في البداية أن يقول أن هذا التيار هو المشفرة في شكل معين. كما أشار المستخدمين الآخرين بها، و
بايت 1ST هو 0XFE
بايت 2ND هو عشرية 0xFF
بايت المتبقية هي
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57