[c++] الحصول على وحدات البايت من ستد :: سلسلة في C ++


Answers

std::string::data تبدو كافية وفعالة. إذا كنت تريد أن يكون الذاكرة غير كونست للتلاعب (غريب للتشفير) يمكنك نسخ البيانات إلى المخزن المؤقت باستخدام ممكبي :

unsigned char buffer[mystring.length()];
memcpy(buffer, mystring.data(), mystring.length());

ستل فانبويس ستشجعك على استخدام ستد :: نسخة بدلا من ذلك:

std::copy(mystring.begin(), mystring.end(), buffer);

ولكن هناك حقا ليس كثيرا من الاتجاه الصعودي لهذا. إذا كنت بحاجة إلى استخدام إنهاء فارغة std::string::c_str() ومختلف تقنيات الازدواجية سلسلة أخرى قدمت، ولكن كنت عموما تجنب ذلك والاستعلام فقط length . لا سيما مع التشفير كنت تعرف فقط شخص ما سيحاول كسره عن طريق تحريك الخداع في ذلك، واستخدام std::string::data() يثبط لك من افتراضا جعل الافتراضات حول البتات الأساسية في السلسلة.

Question

أعمل في مشروع غير مدار C ++.

أنا بحاجة إلى معرفة كيف يمكنني اتخاذ سلسلة مثل هذا "بعض البيانات لتشفير" والحصول على بايت [] مجموعة التي سأستخدم كمصدر للتشفير.

في C # أفعل

  for (int i = 0; i < text.Length; i++)
    buffer[i] = (byte)text[i];

ما أحتاج إلى معرفته هو كيفية القيام بنفس الشيء ولكن باستخدام C ++ غير المدارة.

شكر!




إذا كنت بحاجة فقط لقراءة البيانات.

encrypt(str.data(),str.size());

إذا كنت بحاجة إلى قراءة / كتابة نسخة من البيانات وضعها في ناقلات. (دون؛ ر تخصيص حيوي الفضاء الذي هو وظيفة ناقلات).

std::vector<byte>  source(str.begin(),str.end());
encrypt(&source[0],source.size());

بالطبع نحن جميعا نفترض أن بايت هو شار !!!




إذا كان هذا هو مجرد عادي فانيلا C، ثم:

strcpy(buffer, text.c_str());

على افتراض أن المخزن المؤقت يتم تخصيص وكبيرة بما فيه الكفاية لعقد محتويات 'النص'، وهو الافتراض في التعليمات البرمجية الأصلية.

إذا كان تشفير () يأخذ 'كونست شار *' ثم يمكنك استخدامها

encrypt(text.c_str())

ولا تحتاج إلى نسخ السلسلة.






Links



Tags

c++ c++   string