Untitled

 avatar
unknown
plain_text
9 days ago
1.7 kB
3
Indexable
public class CRC8WCDMA {
    
    // Funkcja obliczająca CRC-8-WCDMA
    public static int crc8Wcdma(byte[] data) {
        int polynomial = 0x9B; // Generating polynomial: 0x9B (10011011)
        int crc = 0x00; // Start value
        
        for (byte b : data) {
            crc ^= b; // Rozpocznij od XOR z aktualnym bajtem
            for (int i = 0; i < 8; i++) { // Iteruj przez każdy bit
                if ((crc & 0x80) != 0) { // Jeśli najstarszy bit jest ustawiony
                    crc = (crc << 1) ^ polynomial; // Przesuń w lewo i XOR z generatorem
                } else {
                    crc <<= 1; // Tylko przesunięcie w lewo
                }
                crc &= 0xFF; // Zachowaj tylko 8 bitów
            }
        }
        
        return crc;
    }

    public static void main(String[] args) {
        // Przykładowy UUID
        String uuid = "39223d25-e021-49cd-b490-ef111ca11d13";
        
        // Usuń myślniki z UUID i przekonwertuj na bajty
        byte[] uuidBytes = hexStringToByteArray(uuid.replace("-", ""));
        
        // Obliczanie CRC-8-WCDMA
        int crcValue = crc8Wcdma(uuidBytes);
        
        System.out.println("Suma kontrolna CRC-8-WCDMA: " + crcValue);
    }
    
    // Funkcja konwertująca string hex na tablicę bajtów
    public static byte[] hexStringToByteArray(String hex) {
        int length = hex.length();
        byte[] data = new byte[length / 2];
        for (int i = 0; i < length; i += 2) {
            data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
                    + Character.digit(hex.charAt(i + 1), 16));
        }
        return data;
    }
}
Leave a Comment