Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Merawat Bait Ditandatangani dengan Benar sebagai Tidak Ditandatangani di Java?
Menukar daripada bait yang ditandatangani kepada tidak ditandatangani boleh mencabar di Jawa, kerana Java tidak asli menyokong jenis bait yang tidak ditandatangani. Akibatnya, apabila nilai bait yang ditandatangani diterima dan ditafsirkan sedemikian, isu integriti data mungkin timbul.
Untuk menangani perkara ini, penyelesaian biasa mencadangkan menggunakan operasi bitwise seperti berikut:
public static int unsignedToBytes(byte a) { int b = a & 0xFF; return b; }
Walau bagaimanapun, kaedah ini gagal mencapai hasil yang diinginkan kerana memberikan nilai yang dikembalikan kepada jenis bait masih menghasilkan tafsiran yang ditandatangani, yang membawa kepada herotan data.
Kunci untuk menyelesaikan isu ini terletak pada pemahaman bahawa sementara primitif di Jawa ditandatangani, perwakilan mereka dalam ingatan tidak. Berikut ialah penyelesaian yang diubah suai yang mentafsirkan bait sebagai nilai yang tidak ditandatangani dengan menurunkannya secara eksplisit:
int i = 200; // 0000 0000 0000 0000 0000 0000 1100 1000 (200) byte b = (byte) i; // 1100 1000 (-56 by Java specification, 200 by convention) /* * When b is cast back to int, sign extension leads to: * 1111 1111 1111 1111 1111 1111 1100 1000 (-56) * * However, we choose to interpret this as +200 instead. */ System.out.println(b); // "-56" /* * To eliminate sign extension, we perform a bitwise AND with 0xFF: * 1111 1111 1111 1111 1111 1111 1100 1000 (the int) * & * 0000 0000 0000 0000 0000 0000 1111 1111 (0xFF) * ======================================= * 0000 0000 0000 0000 0000 0000 1100 1000 (200) */ System.out.println(b & 0xFF); // "200"
Dalam contoh di atas, kami menurunkan integer i kepada bait b, yang mengakibatkan nilai ditafsirkan sebagai negatif mengikut spesifikasi bait yang ditandatangani Java. Walau bagaimanapun, dengan ANDing b secara bitwise secara manual dengan 0xFF, kami secara berkesan mengosongkan sambungan tanda dan mendapatkan semula nilai yang tidak ditandatangani yang betul.
Dengan menggunakan teknik ini, anda boleh bekerja dengan lancar dengan nilai bait yang tidak ditandatangani dalam Java, memastikan pengendalian data yang tepat dan tafsiran dalam batasan bahasa.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Merawat Bait Ditandatangani dengan Benar sebagai Tidak Ditandatangani di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!