рд╕рдВрдХрд▓рди-рд╕рдордп рдореЗрдВ CRC32 рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЧрдгрдирд╛

рдЕрдкрдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЧреИрд░-рдЗрд╖реНрдЯрддрдорддрд╛ рдФрд░ рдЕрддрд┐рд░реЗрдХ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдкрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рдЙрддреНрдкрд╛рдж рдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдЖрдпрд╛ред

рдпрд╣рд╛рдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЕрдиреБрд╡рд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ _TR() рдореИрдХреНрд░реЛ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ:
 wprintf(L"%s\n", _TR("Some translating string")); 

рдореИрдХреНрд░реЛ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд╛рда рдХрд╛ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 #define _TR(x) g_Translator.Translate(x) 

рдпрд╣рд╛рдВ, рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ g_Translator рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ Translate() рдлрд╝рдВрдХреНрд╢рди рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ crc32 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ xml рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд╣реА рдЪреЗрдХрд╕рдо рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд╛рдж рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред

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

"рд╕рдВрдХрд▓рди-рд╕рдордп crc32" рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдереЛрдбрд╝рд╛ рдЧреБрдЧрд▓реА рдХрд░рдирд╛, рдореБрдЭреЗ рдЬрд▓реНрджреА рд╕реЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛-рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдЯреЗрдореНрдкрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдХреЛрдИ рднреА рд╕рдВрджрд░реНрдн рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреЛ рддрд╣ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд▓реЗрдЦ рдХреЗрд╡рд▓ crc32 рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ-рдЕрдиреБрд░реВрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - Boost.MPL ред рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╡реЗрд╢ рдлрд╛рд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 meta::hash_cstring< mpl::string<'bunn','ies'> >::value; 

рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рджреЗрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреА рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА 2450 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреАрдо рдХреЛ рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдлреЙрд░реНрдо рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдВрджреЗрд╢ рднреА рдордВрдЪреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд┐рд╕рд▓ рдЧрдП рдХрд┐ рдирдП C ++ 11 рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХреНрд▓рд╛рд╕рд┐рдХ рдЯреЗрдореНрдкрд▓реЗрдЯ constexpr рдФрд░ constexpr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд▓рдВрдмреА рд╡рдВрд╢рд╛рд╡рд▓реА рд╕реЗ рдПрдХ рдирдП рдорд╛рдирдХ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдПрдХ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрд╛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИ:
 _TR(0x12345678/*"Some hashing string"*/); 

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдореИрдВ рдХреБрдЫ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЪрд╛рд╣рддрд╛ рдерд╛ ... рдореИрдВ рдРрд╕рд╛ рдЬрд╛рджреБрдИ _TR() рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдПрдХ рд╕рд╛рдл crc32 рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗред рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

рдкреНрд░рдпрд╛рд╕ рдирдВрдмрд░ 1ред рд╕реНрд╡рдЪреНрдЫ рдореИрдХреНрд░реЛрдЬрд╝


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдо рд╣реЛ рд░рд╣рд╛ рдерд╛: рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдХреНрд░реЛ рдХреЛ рдЧрдгрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

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

рдХрдИ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ 3 рд╡рд░реНрдгреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рддрд╛рд░ рдХреЗ рд▓рд┐рдП crc32 рдЧрдгрдирд╛ рдХрд╛ рд╕рд░рд▓рддрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛:
 static const unsigned int Crc32Table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, /* ... ,*/ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; template <typename T, int N> char (&array_length(T (&)[N]))[N]; //       #define lengthof(x) (sizeof(array_length(x))) //    crc32 #define TR_CRC(crc,i,s) (crc >> 8)^Crc32Table[(crc^s[i])&0xFF] //            #define TR_CRC_COND(crc,i,s) (i<lengthof(s)-1 ? TR_CRC(crc,i,s):crc) //   CRC     ( 3 ) #define _TR(s) TR_CRC_COND(TR_CRC_COND(TR_CRC_COND(TR_CRC_COND(0xFFFFFFFF,0,s),1,s),2,s),3,s)^0xFFFFFFFF int main(int argc, char *argv[]) { //     ,    - DWORD, //             Olly Sleep(_TR("123")); } 

рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо crc рдЧрдгрдирд╛ рдЪрдХреНрд░ рдХреЛ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рддрдХ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╣реИред рдПрдХ рдореИрдХреНрд░реЛ рд╣рдореЗрд╢рд╛ рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ "1" рдХреА рдЧрдгрдирд╛ рдЕрднреА рднреА 4 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ (рдЕрдзрд┐рдХрддрдо 3 рд╡рд░реНрдгреЛрдВ + '\ 0') рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреА, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдг рд╣реИред рдпрд╣ рдПрдХ рд╕рд╢рд░реНрдд рдСрдкрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрд╛рдИрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рд╕реАрдЖрд░рд╕реА рдореВрд▓реНрдп рдХреЛ рд╣рдереЗрд▓реА рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд┐рдо рдЪрд░рд┐рддреНрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╣реИред

рдбрд┐рдмрдЧрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА exe рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрд╝реАрдорддреА PUSH 884863D2 рджреЗрдЦрд╛, рдЬрд┐рд╕рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдкрд╣рд▓реЗ crc32 рдСрдирд▓рд╛рдЗрди рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛ред



рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореИрдХреНрд░реЛ рдХреЛ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдХрд▓рди рдХреА рдЧрддрд┐ рдХрд┐рддрдиреА рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрд╡рд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдВрдмреА рд▓рд╛рдЗрди 350 рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдереЛрдбрд╝реА рдХрдо рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрдо рд╕реЗ рдХрдо 500 рдЕрдХреНрд╖рд░реЛрдВ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВрдиреЗ рдПрдХ рд╕реНрдереВрд▓ рдирд┐рдХрд╛рдп рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд┐рдЦрддрд╛ рд╣реИ:
 #define _TR(s) TR_CRC_COND(TR_CRC_COND(/*...*/TR_CRC_COND(TR_CRC_COND(0xFFFFFFFF,0,s),1,s),2,s),3,s)/*...*/,448,s),449,s)^0xFFFFFFFF 

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВ рдирд┐рд░рд╛рд╢ рдерд╛ рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рдЕрдкрдиреА рдардВрдб рдЬрд╛рд░реА рдХреА: "рдШрд╛рддрдХ рддреНрд░реБрдЯрд┐ C1009: рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реАрдорд╛: рдореИрдХреНрд░реЛрдЬрд╝ рдиреЗ рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдпрд╛" ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреА рд╕реАрдорд╛ рдХрд╣реАрдВ 300 рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣реИред

рдкреНрд░рдпрд╛рд╕ рдирдВрдмрд░ 2ред __Forceinline рдлрд╝рдВрдХреНрд╢рди


рддрдм рдиреЗрд╕реНрдЯреЗрдб рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрдЬрд╛рдп рдЗрдирд▓рд╛рдЗрди-рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдП рдЧрдП рдереЗ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рд╕рдм рдХреБрдЫ рдпрд╛ рддреЛ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ (рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ рдПрдХ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╢рд╛рдк рджрд┐рдпрд╛) рдпрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рдВрдмреЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдПред

рд╕рднреА рдкреАрдбрд╝рд╛ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЧрдгрдирд╛рдУрдВ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝рд╛ __forceinline рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдРрд╕рд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреАрд╡рди рдореЗрдВ рдХрднреА рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛):
 //  ,       #define CRC_STUB_(i) if (i<N-1) { crc = (crc>>8) ^ Crc32Table[(crc^s[i])&0xFF] } template <int N> static __forceinline DWORD CRC_ARR_CALC_(const char (&s)[N]) { static const unsigned int Crc32Table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, /* ... ,*/ 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; DWORD crc = 0; CRC_STUB_(0);CRC_STUB_(1);CRC_STUB_(2);CRC_STUB_(3);CRC_STUB_(4);CRC_STUB_(5);CRC_STUB_(6);CRC_STUB_(7);CRC_STUB_(8);CRC_STUB_(9);CRC_STUB_(10);CRC_STUB_(11);CRC_STUB_(12);CRC_STUB_(13);CRC_STUB_(14);CRC_STUB_(15);CRC_STUB_(16);CRC_STUB_(17); /* ... */ CRC_STUB_(498);CRC_STUB_(499); return crc; } 

рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛! рд╕рдВрдХрд▓рдХ рдмрд╣реБрдд рдЬрд▓реНрджреА рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдврд╣ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рди рддреЛ рд▓рд╛рдЗрдиреЗрдВ рдЦреБрдж рдХреЛ Crc32Table рд╣реИрдВ, рди рд╣реА рдкрд░рд┐рдгрд╛рдореА рдмрд╛рдЗрдирд░реА рдореЗрдВ Crc32Table рддрд╛рд▓рд┐рдХрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ / O2 рд╕реНрд╡рд┐рдЪ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛ рд╡рд╣ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ crc32 рдХреЗ рд╕рд╛рде g_Translator.Translate() рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рдЕрдзрд┐рднрд╛рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдерд╛, рдФрд░ рдмрд┐рдВрджреБ рдЯреЛрдкреА рдореЗрдВ рд╣реИред

рдХреЛрдб рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдХрд╛ рд╕рдВрдХрд▓рди 1-2 рдорд┐рдирдЯ рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдЗрдирд░реА 200 Kb рд╕реЗ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЕрдм рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдирдХреЗ рд▓реИрдкрдЯреЙрдк рдмреИрдЯрд░реА рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ :)

рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: 7z , tar.gz

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


All Articles