42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| import { _decorator, Component, Node } from 'cc';
 | |
| const { ccclass, property } = _decorator;
 | |
| 
 | |
| 
 | |
| @ccclass('GlobalTool')
 | |
| export class GlobalTool {
 | |
| 
 | |
|     public static CrcDecode(data: Uint8Array, crc32: number): void {
 | |
|         const num: number = 2175242257; // 2175242257L in hexadecimal
 | |
|         const dataView = new DataView(
 | |
|             data.buffer,
 | |
|             data.byteOffset,
 | |
|             data.byteLength
 | |
|         );
 | |
| 
 | |
|         for (let i = 0; i < data.length; i += 4) {
 | |
|             // Ensure we don't read beyond the end of the data
 | |
|             if (i + 4 > data.length) break;
 | |
| 
 | |
|             // Read a 32-bit integer (little endian) from the buffer
 | |
|             let anInt = dataView.getUint32(i, true);
 | |
| 
 | |
|             // Perform the XOR operations
 | |
|             let val = anInt ^ num ^ crc32;
 | |
| 
 | |
|             // Rotate right 6 bits
 | |
|             let jiemi = (val >>> 6) | (val << (32 - 6));
 | |
| 
 | |
|             // Write the result back into the buffer
 | |
|             dataView.setUint32(i, jiemi, true);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
| 
 | |
|     //字节数组转string
 | |
|     public static uint8ArrayToString(data: Uint8Array, Code?: string): string {
 | |
|         if (!Code) Code = 'utf-8';
 | |
|         const decoder = new TextDecoder(Code); // 默认使用 'utf-8' 编码
 | |
|         return decoder.decode(data);
 | |
|     }
 | |
| } |