paranid5

30.09 2

Sep 30th, 2022 (edited)
1,086
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. typedef union {
  5.     uint32_t data;
  6.  
  7.     struct {
  8.         uint32_t version: 4;
  9.         uint32_t ihl: 4;
  10.  
  11.         uint32_t dscp: 6;
  12.         uint32_t ecn: 2;
  13.  
  14.         uint32_t total_len: 16;
  15.     } un;
  16. } ip_v4;
  17.  
  18. ip_v4 new_ipv4(const uint32_t ipv4_number) {
  19.     ip_v4 ip;
  20.     ip.data = ipv4_number;
  21.     return ip;
  22. }
  23.  
  24. int main() {
  25.     const ip_v4 ip = new_ipv4(32);
  26.     printf("version: %u, ihl: %u, dscp: %u, ecn: %u, total len: %u, size: %lu", ip.un.version, ip.un.ihl, ip.un.dscp, ip.un.ecn, ip.un.total_len, sizeof(ip_v4));
  27.     return 0;
  28. }
  29.  
  30. /* 1 Union Solution
  31.  #include <stdio.h>
  32. #include <stdint.h>
  33.  
  34. typedef union {
  35.     uint32_t version: 4;
  36.     uint32_t ihl: 4;
  37.  
  38.     uint32_t dscp: 6;
  39.     uint32_t ecn: 2;
  40.  
  41.     uint32_t total_len: 16;
  42. } ip_v4;
  43.  
  44. ip_v4 new_ipv4(const uint32_t ipv4_number) {
  45.     ip_v4 ip;
  46.  
  47.     ip.version = ipv4_number >> (16 + 2 + 6 + 4);
  48.     ip.ihl = (ipv4_number << 4) >> (6 + 2 + 16);
  49.     ip.dscp = (ipv4_number << (4 + 4)) >> (2 + 16);
  50.     ip.ecn = (ipv4_number << (4 + 4 + 6)) >> (16);
  51.     ip.total_len = ipv4_number << (4 + 4 + 6 + 2);
  52.  
  53.     return ip;
  54. }
  55.  
  56. int main() {
  57.     const ip_v4 ip = new_ipv4(32);
  58.     printf("version: %u, ihl: %u, dscp: %u, ecn: %u, total len: %u, size: %lu", ip.version, ip.ihl, ip.dscp, ip.ecn, ip.total_len, sizeof(ip_v4));
  59.     return 0;
  60. }
  61.  
  62.  */
Advertisement
Comments
  • ennadopra
    2 years (edited)
    Comment was deleted
Add Comment
Please, Sign In to add comment