C / C ++ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдбреЙрдЯ рдХрд░рддреЗ рд╣реИрдВ

рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ C / C ++ рд╕рдВрд░рдЪрдирд╛рдУрдВ - рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдЖред рдкреНрд░рднреБ, рд╣рд╛рдБ, "рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ," рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ? рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рддреБрд░рдВрдд 2 рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░реЗрдВрдЧреЗ: рдкрд╣рд▓рд╛, рдореИрдВ рднрдЧрд╡рд╛рди рдирд╣реАрдВ рд╣реВрдБ , рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдореИрдВрдиреЗ рдпрд╣ рднреА рд╕реЛрдЪрд╛ рдХрд┐ рд╕рдВрд░рдЪрдирд╛рдПрдБ рдЕрдлреНрд░реАрдХрд╛ рдореЗрдВ рднреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ - рдирд╣реАрдВред рдореИрдВ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдХреЛ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ ...




рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕рдВрд░реЗрдЦрдг


рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

struct Foo { char ch; int value; }; 

рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ? sizeof(Foo) ?
рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рд╕рдВрдХрд▓рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ...

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦреЗрддреЛрдВ рдХреЛ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдмрд╣реБ рд╣реИред рдпрд╣реА рд╣реИ, 1-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 2-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рдкрджреЛрдВ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 4-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдЪрд╛рд░ рдХреЗ рдЧреБрдгрдХ рд╣реИрдВ, рдЖрджрд┐ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдпрд╛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдЬ рдпрд╣ рд╣реИ) рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рд╕рдВрд░реЗрдЦрдг 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рддреЛ sizeof(Foo) == 8 ред рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рдЪрд┐рдкрдХреЗрдВрдЧреЗ? рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрднреА рднреА рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдПрдВрдЧреЗ ...


рдЖрдЗрдП рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рджреЗрдЦреЗрдВ:

 struct Foo { char ch; short id; int value; }; 

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


рдпрд╣реА рд╣реИ, 4 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде shoved (рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛), рдПрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:

 struct Foo { char ch; short id; short opt; int value; }; 

рдЖрдЗрдП рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕реНрдерд╛рди рдХреЛ рджреЗрдЦреЗрдВ:


рдпрд╣ рд╕рдм рдУрд╣ рдХрд┐рддрдирд╛ рджреБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рд╕реЗ рд╕реАрдзреЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ:

 #pragma pack(push, 1) struct Foo { // ... }; #pragma pack(pop) 

рд╣рдордиреЗ рд╕рдВрд░реЗрдЦрдг рдЖрдХрд╛рд░ рдХреЛ 1 рдмрд╛рдЗрдЯ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛, рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдФрд░ рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ред рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рд▓реМрдЯреЗрдВ - рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдмрд╛рд░ рдпрд╣ рдерд╛ - рдХреНрдпреВрдЯреА рдЧрд┐рд░ рдЧрдпрд╛ред рдХрд╣реАрдВ рдЙрд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ .рд╣-рдирд┐рдХ рд╕реЗ рдиреАрдЪреЗ рдврдХреЗрд▓рд╛ рд╣реИред-рдирд┐рдХ ...

рдмрд┐рдЯ рдХреНрд╖реЗрддреНрд░


рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рд▓реЛрднрди рдмрд╣реБрдд рдорд╣рд╛рди рд╣реИ ...

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рджрд┐рд▓ рд╕реЗ рдЕрд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд╛рд╕реНрдХ рдФрд░ рд╢рд┐рдлреНрдЯреНрд╕ рдХреА рдорджрдж рд╕реЗ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рдХреЛрдб рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЪрдордХрджрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

 unsigned field = 0x00530000; // ... field &= 0xFFFF00FF; field |= (id) << 8; // ... field &= 0xFFFFFF83; field |= (proto) << 2; 

рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рдХреА рдЙрджрд╛рд╕реА рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЗ рдмрджрдмреВ рдЖрддреА рд╣реИ рдХрд┐ рдореБрдЭреЗ рддреБрд░рдВрдд рдорд╛рдЗрдЧреНрд░реЗрди рд╣реИ! рдФрд░ рдлрд┐рд░ рд╡реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╕реЗ рдмрд╛рд╣рд░ рдЖрддреЗ рд╣реИрдВ - рдмрд┐рдЯ рдлреАрд▓реНрдбреНрд╕ред рд╕рдмрд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдХреНрдпрд╛ рд╣реИ - рд╡реЗ рдЕрднреА рднреА рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдереЗ, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ - рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдЕрдзрд░реНрдо рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред

рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:

 #pragma pack(push,1) struct IpHeader { uint8_t header_length:4; uint8_t version:4; uint8_t type_of_service; uint16_t total_length; uint16_t identificator; // Flags uint8_t _reserved:1; uint8_t dont_fragment:1; uint8_t more_fragments:1; uint8_t fragment_offset_part1:5; uint8_t fragment_offset_part2; uint8_t time_to_live; uint8_t protocol; uint16_t checksum; // ... }; #pragma pack(pop) 

рдФрд░ рдлрд┐рд░ рдХреЛрдб рдореЗрдВ рд╣рдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ C / C ++ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдкрд╛рд▓реА рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЖрджрд┐ред рд╕рдВрдХрд▓рдХ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ ... рдЬрдм рдЖрдк рдПрдХ рднреМрддрд┐рдХ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ (рдореЗрд░рд╛ рдорддрд▓рдм рдЙрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╣реИ рдЬреЛ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╣реИ) - рдлрд╝реАрд▓реНрдб рдХреЗ рдЕрдВрдд рддрдХ рд╕рднреА рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдЗрди рдмрд┐рдЯреНрд╕ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдВрдЧреЗ рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдХреЛрдб рд╣реЛрдЧрд╛:

 #pragma pack(push,1) stuct MyBitStruct { uint16_t a:4; uint16_t b:4; uint16_t c; }; #pragma pack(pop) 

рдкрд░рд┐рдгрд╛рдореА рд╕рдВрд░рдЪрдирд╛ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ! рдкрд╣рд▓реА рдмрд╛рдЗрдЯ рдХреЗ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЦреЗрдд a рдФрд░ b ред рджреВрд╕рд░рд╛ рдмрд╛рдЗрдЯ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо 2 рдмрд╛рдЗрдЯреНрд╕ c рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рдХреНрд╖рдг рд╣реИред рдЬрдм рдЖрдк рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ sizeof рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ!

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдмрд┐рдЯ рдкреЗрди рдХреЛ рдмрд╛рдЗрдЯ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдмрд╛рдЗрдЯ рдХреНрд░рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЖрджреЗрд╢ LITTLE_ENDIAN рдХреЗ рд╕рд╛рде, рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд BIG_ENDIAN ...

рдмрд╛рдЗрдЯ рдХреНрд░рдо


рдореИрдВ рдХреЛрдб рдореЗрдВ htons() , ntohs() , htonl() , nthol() C ++ рдХреЛрдб рдореЗрдВ рднреА рджреБрдЦреА рд╣реВрдВред C рдореЗрдВ, рдпрд╣ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди C ++ рдореЗрдВ рдирд╣реАрдВред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрднреА рдирд╣реАрдВ рдбрд╛рд▓реВрдБрдЧрд╛! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рднреА C ++ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ!

рд╡реИрд╕реЗ рдпрд╣рд╛рдБ рдореИрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реВрдБред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдмрд╛рдЗрдЯ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдмрд╛рд╣реНрдп рд░реВрдк рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрджрд░ рд╡реЗ рдЦреБрдж рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рднрдВрдбрд╛рд░рдг рдХреНрд░рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реА рдЖрдИрдкреА рд╣реЗрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 #pragma pack(push,1) struct IpHeader { uint8_t header_length:4; uint8_t version:4; uint8_t type_of_service; u16be total_length; u16be identificator; // Flags uint8_t _reserved:1; uint8_t dont_fragment:1; uint8_t more_fragments:1; uint8_t fragment_offset_part1:5; uint8_t fragment_offset_part2; uint8_t time_to_live; uint8_t protocol; u16be checksum; // ... }; #pragma pack(pop) 

2-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - u16be ред рдЕрдм рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рдмрд╛рдЗрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднреА рднреА fragment_offset рд╕рдорд╕реНрдпрд╛рдПрдВ fragment_offset , рд▓реЗрдХрд┐рди рдЬреЛ рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЕрдкрдорд╛рди рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

"рд╕реА ++ рднрд╛рд╖рд╛ рдЗрддрдиреА рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ" ┬й рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд - рдореИрдВ

ZY рдореИрдВ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рд╕реНрдЯреИрдХ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЖрджрд░реНрд╢ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВред рдбрд┐рд╕реВрдбреЗ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рдП!

Source: https://habr.com/ru/post/In142662/


All Articles