سؤال

أنا أستخدم مكتبة NTL لتنفيذ خوارزمية التشفير/فك التشفير. لقد وصلت إلى درجة أنه يعمل ولكن الخوارزمية تريد تحويل الرسالة إلى أعداد صحيحة حتى يمكن تشفيرها.
لذا ، إذا قمت بإدخال رقم مثل 1234 ، فكل شيء يعمل بشكل جيد ، لكن كيف يمكنني أن أتمكن من تحويل سلسلة C ++ (Std :: String) إلى رقم ZZ ثم العودة من رقم ZZ إلى سلسلة؟

لو:

ZZ إنه فئة تمثل عددًا كبيرًا.
على سبيل المثال: 1828734823847628365823481728316274273671623781254124517353

لذا ، أنا أتطلع إلى أخذ "Hello World" على سبيل المثال وقم بتشغيله بواسطة char والحصول على رمز ASCII لـ chars ، لذا سأحصل على رقم: "72 101 108 108 111 32 87 111 114 108 100"
ثم أحتاج إلى تحويل هذا الرقم إلى السلسلة "Hello World"

أو ربما هناك طريقة أفضل.

هل كانت مفيدة؟

المحلول

هذه طريقة سهلة للقيام بذلك:

std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());

لاحظ الآن أن:

std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890

نصائح أخرى

فيما يلي إجابة من موقع NTL للمؤلف:

بالإضافة إلى التحويلات المدرجة ، هناك تحويل عام من أ C- الأسلاك (أي ، const char *) إلى أي نوع t ، والذي يتم تنفيذه باستخدام قوالب باستخدام مشغل الإدخال >> للنوع T. لذلك ، على سبيل المثال ، يمكنك الكتابة

    ZZ x = conv<ZZ>("99999999999999999999999");

مصدر: http://www.shoup.net/ntl/doc/conversions.txt

جربته ، وعملت تماما.

إلى حد بعيد الحل الأسهل هو إدراك أنه يمكنك التحويل charق unsigned intرمل unsigned intق ZZ أعداد. ثم تعامل مع السلسلة كرقم أساسي 256. على سبيل المثال ، سيكون "ABC" 256 * "AB" + "C" ، أو 65536 * "A" + 256 * "B" + "C" ، أو ((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c')),

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top