طريقة للحصول على char غير موقعة في Std :: String بدون reinterpret_cast؟

StackOverflow https://stackoverflow.com/questions/2840835

  •  27-09-2019
  •  | 
  •  

سؤال

لديّ صفيف char غير موقّع الذي أحتاجه في سلسلة std :: ، لكن طريقي الحالي يستخدم reinterpret_cast الذي أود تجنبه. هل هناك طريقة أنظف للقيام بذلك؟

unsigned char my_txt[] = {
  0x52, 0x5f, 0x73, 0x68, 0x7e, 0x29, 0x33, 0x74, 0x74, 0x73, 0x72, 0x55
}
unsigned int my_txt_len = 12;

std::string my_std_string(reinterpret_cast<const char *>(my_txt), my_txt_len);
هل كانت مفيدة؟

المحلول

استخدم مُنشئ التكرار:

std::string my_std_string(my_txt, my_txt + my_txt_len);

هذا يفترض أنك تريد تحويل chars غير موقعة إلى char. اذا أنت تريد لإعادة تفسيرهم ، يجب عليك استخدامها reinterpret_cast. سيكون ذلك نظيفًا تمامًا ، لأن ما تقوله هو بالضبط ما يتم.

في مثالك ، على الرغم من ذلك ، لا يحدث أي فرق ، لأن جميع القيم الموجودة في صفيفك موجودة ضمن النطاق 0 ل CHAR_MAX. لذلك من المضمون أن يتم تمثيل هذه القيم بنفس الطريقة char كما هم في unsigned char, وبالتالي فإن إعادة تفسيرها هو نفسه تحويلها. إذا كان لديك قيم أكبر إذن CHAR_MAX ثم يُسمح للتطبيقات بمعالجتها بشكل مختلف.

نصائح أخرى

هل جربت sstream؟

     stringstream s;
     s << my_txt;

     string str_my_txt = s.str();
  int _tmain(int argc, _TCHAR* argv[])
  {
        unsigned char temp  = 200;
        char temp1[4];

        sprintf(temp1, "%d", temp);

        std::string strtemp(temp1);

        std::cout<<strtemp.c_str()<<std::endl;

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