Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2021
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #include <limits.h>
  5.  
  6.  
  7. uint8_t *_convert_c_int_to_bytes(int64_t value, size_t size)
  8. {
  9.     uint8_t *bytes = malloc(sizeof(uint8_t) * size);
  10.  
  11.     for (size_t i = 0; i < size; i++)
  12.         bytes[i] = (value >> i * 8) & 0xFF;
  13.  
  14.     return bytes;
  15. }
  16.  
  17.  
  18. uint8_t *_convert_c_uint_to_bytes(uint64_t value, size_t size)
  19. {
  20.     uint8_t *bytes = malloc(sizeof(uint8_t) * size);
  21.  
  22.     for (size_t i = 0; i < size; i++)
  23.         bytes[i] = (value >> i * 8) & 0xFF;
  24.  
  25.     return bytes;
  26. }
  27.  
  28.  
  29. int64_t _convert_bytes_to_c_int(uint8_t *bytes, size_t size)
  30. {
  31.     int64_t value = 0;
  32.  
  33.     for (size_t i = 0; i < size; i++)
  34.         value += bytes[i] << (i * 8);
  35.  
  36.     return value;
  37. }
  38.  
  39.  
  40. uint64_t _convert_bytes_to_c_uint(uint8_t *bytes, size_t size)
  41. {
  42.     uint64_t value = 0;
  43.  
  44.     for (size_t i = 0; i < size; i++)
  45.         value += bytes[i] << (i * 8);
  46.  
  47.     return value;
  48. }
  49.  
  50.  
  51. void dbg_print_bytes(uint8_t *bytes, size_t size)
  52. {
  53.     printf("uint8_t * {");
  54.     for (size_t i = 0; i < size; i++)
  55.         printf("%02x ", bytes[i]);
  56.     printf("}\n");
  57. }
  58.  
  59.  
  60. int main(void)
  61. {
  62.     printf("uint64_t %lu -> ", ULONG_MAX);
  63.     dbg_print_bytes(_convert_c_uint_to_bytes(ULONG_MAX, 8), 8);
  64.     printf("int64_t %li -> ", LONG_MIN);
  65.     dbg_print_bytes(_convert_c_int_to_bytes(LONG_MIN, 8), 8);
  66.     printf("int64_t %li -> ", LONG_MAX);
  67.     dbg_print_bytes(_convert_c_int_to_bytes(LONG_MAX, 8), 8);
  68.  
  69.     printf("uint64_t %lu -> uint8_t * -> uint64_t %lu\n", ULONG_MAX, _convert_bytes_to_c_uint(_convert_c_uint_to_bytes(ULONG_MAX, 8), 8));
  70.     printf("int64_t %li -> uint8_t * -> int64_t %li\n", LONG_MIN, _convert_bytes_to_c_int(_convert_c_int_to_bytes(LONG_MIN, 8), 8));
  71.     printf("int64_t %li -> uint8_t * -> int64_t %li\n", LONG_MAX, _convert_bytes_to_c_int(_convert_c_int_to_bytes(LONG_MAX, 8), 8));
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement