Kiểm tra BCC với ByteArray trong Kotlin - mu88 mu88 casino

/imgposts/q6ps9525.jpg

Trong việc phát triển ứng dụng Android, chúng ta cần thêm byte kiểm tra BCC vào dữ liệu gửi đến bảng điều khiển Bluetooth. Ở đây, tôi sẽ trình bày cách thực hiện bằng ngôn ngữ Kotlin.

Việc này phụ thuộc vào cách mà dự án hiện tại đã định nghĩa quy tắc kiểm tra BCC, do nạp tiền bằng sms đó nó không mang tính phổ quát. Bạn có thể bỏ qua phần này nếu không cần thiết.

Quy tắc hiện tại là: Loại bỏ byte đầu tiên và byte cuối cùng, cũng như byte kiểm tra ở vị trí thứ hai từ cuối, sau đó áp dụng phép làm đại lý kiểm tra BCC cho phạm vi dữ liệu còn lại.

Chúng ta sử dụng gói dữ liệu BLE nhận được để làm ví dụ thử nghiệm.

AB 00 06 A2 05 20 32 30 2E 37 31 AB BA

Sau khi loại bỏ các byte không cần thiết, dữ liệu cần xử lý sẽ là:

00 06 A2 05 20 32 30 2E 37 31

Byte kiểm tra BCC tương ứng là:

AB

Để tự động thêm byte kiểm tra BCC vào một mảng ByteArray, chúng ta có thể viết hàm mở rộng như sau:

1fun ByteArray.bcc(): ByteArray {
2    var bcc = 0x00
3    for (byte in this) {
4        bcc = bcc.xor(byte.toInt())
5    }
6    return this.plus(bcc.toByte())
7}

Mã nguồn này được cung cấp bởi ChatGPT 4 và hoạt động rất chính xác, trong khi các nguồn khác thường đưa ra mã lỗi.

Trong thư mục test của dự án Android Studio, bạn có thể thêm đoạn mã sau để kiểm thử chức năng:

 1class ExampleUnitTest {
 2    @Test
 3    fun addition_isCorrect() {
 4        assertEquals(4, 2 + 2)
 5    }
 6
 7    @Test
 8    fun bytearray_bcc() {
 9        val data = byteArrayOf(0x00, 0x06, 0xA2.toByte(), 0x05, 0x20, 0x32, 0x30, 0x2E, 0x37, 0x31)
10        val newData = data.bcc()
11        println("Dữ liệu kèm byte BCC: ${newData.toHex()}")
12        // Kết quả mong đợi: 00 06 A2 05 20 32 30 2E 37 31 AB
13        assertEquals(newData[newData.size - 1], 0xAB.toByte())
14    }
15}

Để chạy kiểm thử, hãy nhấp chuột phải vào tệp UnitTest này và chọn "Run UnitTest". Sau đó, bạn có thể xem kết quả của bài kiểm thử.

Lưu ý: Chúng ta sử dụng toByte() để đảm bảo giá trị nằm trong phạm vi phù hợp của kiểu dữ liệu Byte trong Kotlin.

  • Một phiên bản JavaScript trước đây cũng đã thực hiện kiểm tra BCC theo cách tương tự.