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

рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕рдВрд░реЗрдЦрдг
рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
struct Foo { char ch; int value; };
рдареАрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ?
sizeof(Foo)
?
рд╕реНрдореГрддрд┐ рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЖрдХрд╛рд░ рд╕рдВрдХрд▓рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ...
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦреЗрддреЛрдВ рдХреЛ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдмрд╣реБ рд╣реИред рдпрд╣реА рд╣реИ, 1-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 2-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рдкрджреЛрдВ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, 4-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдЪрд╛рд░ рдХреЗ рдЧреБрдгрдХ рд╣реИрдВ, рдЖрджрд┐ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдпрд╛ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдЬ рдпрд╣ рд╣реИ) рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рд╕рдВрд░реЗрдЦрдг 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рддреЛ
sizeof(Foo) == 8
ред рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рдЪрд┐рдкрдХреЗрдВрдЧреЗ? рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрднреА рднреА рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдПрдВрдЧреЗ ...
- 1 рдмрд╛рдЗрдЯ: ch
- 2 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 3 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 4 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 5 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [0]
- 6 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [1]
- 7 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [2]
- 8 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [3]
рдЖрдЗрдП рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рджреЗрдЦреЗрдВ:
struct Foo { char ch; short id; int value; };
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- 1 рдмрд╛рдЗрдЯ: ch
- 2 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 3 рдмрд╛рдЗрдЯреНрд╕: рдЖрдИрдбреА [0]
- 4 рдмрд╛рдЗрдЯреНрд╕: рдЖрдИрдбреА [1]
- 5 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [0]
- 6 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [1]
- 7 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [2]
- 8 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [3]
рдпрд╣реА рд╣реИ, 4 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде shoved (рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛), рдПрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:
struct Foo { char ch; short id; short opt; int value; };
рдЖрдЗрдП рд╕реНрдореГрддрд┐ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕реНрдерд╛рди рдХреЛ рджреЗрдЦреЗрдВ:
- 1 рдмрд╛рдЗрдЯ: ch
- 2 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 3 рдмрд╛рдЗрдЯреНрд╕: рдЖрдИрдбреА [0]
- 4 рдмрд╛рдЗрдЯреНрд╕: рдЖрдИрдбреА [1]
- 5 рдмрд╛рдЗрдЯреНрд╕: рдСрдкреНрдЯ [0]
- 6 рдмрд╛рдЗрдЯреНрд╕: рдСрдкреНрдЯ [1]
- 7 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 8 рдмрд╛рдЗрдЯреНрд╕: рдЦрд╛рд▓реА
- 9 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [0]
- 10 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [1]
- 11 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [2]
- 12 рдмрд╛рдЗрдЯреНрд╕: рдореВрд▓реНрдп [3]
рдпрд╣ рд╕рдм рдУрд╣ рдХрд┐рддрдирд╛ рджреБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рд╕реЗ рд╕реАрдзреЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ:
#pragma pack(push, 1) struct Foo {
рд╣рдордиреЗ рд╕рдВрд░реЗрдЦрдг рдЖрдХрд╛рд░ рдХреЛ 1 рдмрд╛рдЗрдЯ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛, рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдФрд░ рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛ред рдкрд┐рдЫрд▓реА рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рд▓реМрдЯреЗрдВ - рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдмрд╛рд░ рдпрд╣ рдерд╛ - рдХреНрдпреВрдЯреА рдЧрд┐рд░ рдЧрдпрд╛ред рдХрд╣реАрдВ рдЙрд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ .рд╣-рдирд┐рдХ рд╕реЗ рдиреАрдЪреЗ рдврдХреЗрд▓рд╛ рд╣реИред-рдирд┐рдХ ...
рдмрд┐рдЯ рдХреНрд╖реЗрддреНрд░
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдб "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░рд┐рднрд╛рд╖рд┐рдд" рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рд▓реЛрднрди рдмрд╣реБрдд рдорд╣рд╛рди рд╣реИ ...рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рджрд┐рд▓ рд╕реЗ рдЕрд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЬрдм рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд╛рд╕реНрдХ рдФрд░ рд╢рд┐рдлреНрдЯреНрд╕ рдХреА рдорджрдж рд╕реЗ рдмрд┐рдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рднрд░рдиреЗ рдХреЗ рдХреЛрдб рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЪрдордХрджрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
unsigned field = 0x00530000;
рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рдХреА рдЙрджрд╛рд╕реА рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЗ рдмрджрдмреВ рдЖрддреА рд╣реИ рдХрд┐ рдореБрдЭреЗ рддреБрд░рдВрдд рдорд╛рдЗрдЧреНрд░реЗрди рд╣реИ! рдФрд░ рдлрд┐рд░ рд╡реЗ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╕реЗ рдмрд╛рд╣рд░ рдЖрддреЗ рд╣реИрдВ - рдмрд┐рдЯ рдлреАрд▓реНрдбреНрд╕ред рд╕рдмрд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдХреНрдпрд╛ рд╣реИ - рд╡реЗ рдЕрднреА рднреА рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдереЗ, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ - рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдЕрдзрд░реНрдо рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛ред
рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:
#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;
рдФрд░ рдлрд┐рд░ рдХреЛрдб рдореЗрдВ рд╣рдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ 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;
2-рдмрд╛рдЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ -
u16be
ред рдЕрдм рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рдмрд╛рдЗрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрднреА рднреА
fragment_offset
рд╕рдорд╕реНрдпрд╛рдПрдВ
fragment_offset
, рд▓реЗрдХрд┐рди рдЬреЛ рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдЖрдк рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЕрдкрдорд╛рди рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдХреЛрдб рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
"рд╕реА ++ рднрд╛рд╖рд╛ рдЗрддрдиреА рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╕ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ" ┬й рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд - рдореИрдВ
ZY рдореИрдВ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рд╕реНрдЯреИрдХ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЖрджрд░реНрд╢ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВред рдбрд┐рд╕реВрдбреЗ - рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдмрд╣реБрдд рджреЗрд░ рд╣реЛ рдЬрд╛рдП!