 c6dc6735fa
			
		
	
	c6dc6735fa
	
	
	
		
			
			- Reorganize project structure: Port/ → DotNet/, VC/, C++/ - Add comprehensive cross-platform build automation - Windows: build_all.bat, build.bat files for all components - Linux/macOS: build_all.sh, build.sh files for all components - Update all build scripts with correct folder paths - Create test automation scripts (test_all.bat/sh) - Update documentation to reflect new structure - Maintain 100% roundtrip accuracy for test5.exi (pure EXI) - Support both Windows MSBuild and Linux GCC compilation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <ctype.h>
 | |
| 
 | |
| int hex_char_to_int(char c) {
 | |
|     if (c >= '0' && c <= '9') return c - '0';
 | |
|     if (c >= 'A' && c <= 'F') return c - 'A' + 10;
 | |
|     if (c >= 'a' && c <= 'f') return c - 'a' + 10;
 | |
|     return -1;
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|     const char* hex_string = "8098021050908C0C0C0E0C50D10032018600A01881AE0601860C806140C801030800006100001881980600";
 | |
|     
 | |
|     size_t hex_len = strlen(hex_string);
 | |
|     if (hex_len % 2 != 0) {
 | |
|         printf("Error: Hex string length must be even\n");
 | |
|         return -1;
 | |
|     }
 | |
|     
 | |
|     size_t binary_len = hex_len / 2;
 | |
|     unsigned char* binary_data = malloc(binary_len);
 | |
|     
 | |
|     if (!binary_data) {
 | |
|         printf("Memory allocation failed\n");
 | |
|         return -1;
 | |
|     }
 | |
|     
 | |
|     // Convert hex string to binary
 | |
|     for (size_t i = 0; i < binary_len; i++) {
 | |
|         int high = hex_char_to_int(hex_string[i * 2]);
 | |
|         int low = hex_char_to_int(hex_string[i * 2 + 1]);
 | |
|         
 | |
|         if (high == -1 || low == -1) {
 | |
|             printf("Invalid hex character at position %zu\n", i * 2);
 | |
|             free(binary_data);
 | |
|             return -1;
 | |
|         }
 | |
|         
 | |
|         binary_data[i] = (high << 4) | low;
 | |
|     }
 | |
|     
 | |
|     // Write to file
 | |
|     FILE* file = fopen("test1.exi", "wb");
 | |
|     if (!file) {
 | |
|         printf("Cannot create output file\n");
 | |
|         free(binary_data);
 | |
|         return -1;
 | |
|     }
 | |
|     
 | |
|     size_t written = fwrite(binary_data, 1, binary_len, file);
 | |
|     fclose(file);
 | |
|     free(binary_data);
 | |
|     
 | |
|     if (written != binary_len) {
 | |
|         printf("Write error\n");
 | |
|         return -1;
 | |
|     }
 | |
|     
 | |
|     printf("Successfully created test1.exi with %zu bytes\n", binary_len);
 | |
|     
 | |
|     // Show first few bytes for verification
 | |
|     printf("First 16 bytes: ");
 | |
|     FILE* verify = fopen("test1.exi", "rb");
 | |
|     if (verify) {
 | |
|         for (int i = 0; i < 16 && i < binary_len; i++) {
 | |
|             int c = fgetc(verify);
 | |
|             printf("%02X ", c);
 | |
|         }
 | |
|         fclose(verify);
 | |
|     }
 | |
|     printf("\n");
 | |
|     
 | |
|     return 0;
 | |
| } |