İnt8_t dizisinden std:: string oluştur

0

Soru

Bazı kodlarda int8_t[] tür yerine kullanılır char[].

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(title); // compile error: no corresponding constructor

Düzgün ve güvenli bir şekilde nasıl oluşturulur std::string ondan?

Ne zaman yapacağım cout << s; Yazdırmak istiyorum. aews, sanki char[] tür yapıcıya iletildi.

c++ casting char integer
2021-11-23 15:34:12
2

En iyi cevabı

2

Buyurun

int8_t title[256] = { 'a', 'e', 'w', 's' };
std::string s( reinterpret_cast<char *>( title ) );
std::cout << s << '\n';

Veya ayrıca kullanabilirsiniz

std::string s( reinterpret_cast<char *>( title ), 4 );
2021-11-23 15:45:55

Dizide açık bir boş sonlandırıcı olmadan kötü bir fikir gibi geliyor.
dave

@ dave Ve neden boş sonlandırma karakteri olmadığına karar verdiniz?
Vlad from Moscow

Bu dizide 252 boş sonlandırıcı olmalıdır. :-)
Ted Lyngmo

@ dave Aynı şeyi düşündüm ve sonra tüm eksik başlatıcıların ayarlandığını hatırladım 0 yani içinde 252 boş sonlandırıcı var.
NathanOliver

Doğru, 256 bedenini görmedim. O zaman bu durumda sorun değil
dave
1

std::string diğer kaplar gibi, bir çift yineleyici kullanılarak da oluşturulabilir. Bu yapıcı, varsa dönüştürme gibi örtülü dönüşümleri kullanır int8_t -e doğru char.

int8_t title[256] = {'a', 'e', 'w', 's'};
std::string s(std::begin(title), std::end(title));

Bu çözüm, kullanılmayan bayt da dahil olmak üzere tüm diziyi kopyalayacağını unutmayın. Dizi genellikle olması gerekenden çok daha büyükse, bunun yerine boş sonlandırıcıyı arayabilirsiniz

int8_t title[256] = {'a', 'e', 'w', 's'};
auto end = std::find(std::begin(title), std::end(title), '\0');
std::string s(std::begin(title), end);
2021-11-23 15:38:17

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................