c++ समस इंटीजर्स के रूप में मुद्रण वर्ण




पहिले मुद्रणालय (3)

नहीं, कोई बेहतर तरीका नहीं है एक बेहतर तरीका एक कस्टम स्ट्रीम मैनिप्युलेटर का रूप लेगा, जैसे std::hex । फिर आप अपनी पूर्णांक छपाई बंद कर सकते हैं और बिना प्रत्येक नंबर के लिए इसे निर्दिष्ट कर सकते हैं। लेकिन कस्टम मैनिपुलेटर स्वयं स्ट्रीम पर काम करते हैं, और आप जो करना चाहते हैं, उसके लिए कोई प्रारूप झंडे नहीं हैं। मुझे लगता है कि आप अपनी खुद की धारा लिख ​​सकते हैं, लेकिन अब आप जितना काम कर रहे हैं, उतना ही काम है।

ईमानदारी से, आपकी सबसे अच्छी शर्त यह जानना है कि क्या आपके टेक्स्ट एडिटर में static_cast<int> आसान टाइप करने के लिए कार्य किया गया है मुझे लगता है आप अन्यथा इसे बहुत अधिक टाइप करेंगे या आप पूछ नहीं रहे होंगे। इस प्रकार कोई व्यक्ति जो आपके कोड को पढ़ता है, वह वास्तव में ठीक से जानता है कि आप क्या कह रहे हैं (यानी, एक पूर्णांक के रूप में एक चार को छपाई) कोई कस्टम फ़ंक्शन की परिभाषा को देखने के बिना।

मैं यह नियंत्रित करना चाहता हूं कि क्या मेरे ostream आउटपुट को char एस और unsigned char के माध्यम से << उन्हें अक्षर या पूर्णांक के रूप में लिखता है मानक पुस्तकालय में मुझे ऐसा कोई विकल्प नहीं मिल रहा है अभी के लिए मैंने वैकल्पिक प्रिंट फ़ंक्शंस के सेट पर कई ओवरलोड का उपयोग करने के लिए वापस लिया है

ostream& show(ostream& os, char s) { return os << static_cast<int>(s); }
ostream& show(ostream& os, unsigned char s) { return os << static_cast<int>(s); }

क्या कोई बेहतर तरीका है?


मेरे पास एक तकनीक है जिस पर इस्तेमाल किया गया तकनीक के आधार पर एक सुझाव है कि मैं कैसे एक अहस्ताक्षरित अक्षर को हेक्स में सी ++ का उपयोग करके ओस्ट्रीम का उपयोग करूँ?

template <typename Char>
struct Formatter
  {
  Char c;
  Formatter(Char _c) : c(_c) { }

  bool PrintAsNumber() const
    {
    // implement your condition here
    }
  };

template <typename Char> 
std::ostream& operator<<(std::ostream& o, const Formatter<Char>& _fmt)
  {
  if (_fmt.PrintAsNumber())
    return (o << static_cast<int>(_fmt.c));
  else
    return (o << _fmt.c);
  }

template <typename Char> 
Formatter<Char> fmt(Char _c)
  {
  return Formatter<Char>(_c);
  }

void Test()
  {
  char a = 66;
  std::cout << fmt(a) << std::endl;
  }

बस एक पुराने पोस्ट के लिए एक अद्यतन वास्तविक चाल '+' का प्रयोग कर रही है उदाहरण के लिए:

template <typename T>
void my_super_function(T x)
{
  // ...
  std::cout << +x << '\n';  // promotes x to a type printable as a number, regardless of type
  // ...
}

सी ++ 11 में आप कर सकते हैं:

template <typename T>
auto promote_to_printable_integer_type(T i) -> decltype(+i)
{
  return +i;
}

क्रेडिट: मैं एक संख्या के रूप में एक वर्ण कैसे मुद्रित कर सकता हूँ? मैं एक चार * कैसे मुद्रित कर सकता हूँ ताकि आउटपुट सूचक का अंकीय मूल्य दिखा सके?







interpretation