https://github.com/client9/stringencoders/blob/master/src/modp_b64.h#L170-L193
/** \brief b64 encode a const std::string * * \param[in] s the input string to encode * \return a newly allocated b64 string. Empty if failed. */ inline std::string b64_encode(const std::string& s) { return b64_encode( s.data( ), s.size( )); } /** * base 64 encode a string (self-modifing) * * This function is for C++ only (duh) * * \param[in,out] s the string to be decoded * \return a reference to the input string */ inline std::string& b64_encode( std::string& s) { std::string x( b64_encode( s.data( ), s.size( ))); s.swap( x); return s; }
Казалось бы, что может пойти не так?
Автор гений
А ещё он во втором случае не сэкономил на аллокациях
1 frag / 2 deaths
> А ещё он во втором случае не сэкономил на аллокациях
b64_encode не имеет инплейс-версии.
Имбирная Ведьмочка
> * This function is for C++ only (duh)
Реально, эх!
stringencoders is a security-critical library for Chromium
Имбирная Ведьмочка
> Казалось бы, что может пойти не так?
auto& invalid_string_ref = b64_encode(SomeClass( ).getNonConstReferenceString( ));
=A=L=X=
> Тынасуши Янамори
В японском языке нет слога "Ты", как и вообще гласной "ы". Вот "Тэ" есть. То есть, могло бы быть "Тенасуши Янамори". Правда нормального кунного сочетания иероглифов для "Тенасуши" тоже нет, только как словосочетание "te na sushi" ("рукодельные суши"), но такое словосочетание не может быть именем.
Примерно такая же история с широкоизвестным "Тояма Токанава". Тояма нормально, но для Токанава нормального кунного сочетания иероглифов нет. Но можно как имена(фамилии) пары людей, - "toyama to kanawa" (Тояма и Канава). Правда без суффиксов "сан"/"сенсей" или еще каких не очень вежливо.
А вот "Ясука Такая" вполне себе могло бы быть.
Имбирная Ведьмочка
b64_encode(char*,size_t) что возвращает и того же размера, что исходная строка?
1Man1
> b64_encode(char*,size_t) что возвращает и того же размера, что исходная строка?
/** \brief b64 encode a cstr with len * * \param[in] s the input string to encode * \param[in] len the length of the input string * \return a newly allocated b64 string. Empty if failed. */ inline std::string b64_encode(const char* s, size_t len) { std::string x( modp_b64_encode_len( len), '\0'); size_t d = modp_b64_encode( const_cast<char*>( x.data( )), s, len); if ( d == ( size_t)-1) { x.clear( ); } else { x.erase( d, std::string::npos); } return x; }
Dmitry_Milk
что есть "кунное сочетание"?
Dmitry_Milk
> Правда нормального кунного сочетания иероглифов для "Тенасуши" тоже нет,
В японских фамилях и именах свои чтение иероглифов, которое ты сам и придумываешь.
Чтение и запись в именах это вообще разные вещи в японских именах.
Никто тебе не мешает назваться Мун, а в написание использовать 月
Ну и кану тоже никто не мешает использовать в именах