2012-03-07 12 views
9

क्या std::streambuf है-बहु-बाइट मानों को नेटवर्क-बाइट ऑर्डर में परिवर्तित करने के लिए तंत्र की तरह? विशेष रूप से, बूस्ट एशियाई इतनी आदिम पेशकश करता है? यहाँ मैं धारा बफर करना चाहते हैं क्या का एक उदाहरण है:क्या कोई std :: streambuf संस्करण है जो मेजबान को नेटवर्क बाइट ऑर्डर में परिवर्तित करता है?

uint64_t x = 42ull; 
network_streambuf b1; 
std::ostream os(&b1); 
os << 42ull; // htonll 

network_streambuf b2; 
std::istream is(&b2); 
uint64_t y; 
is >> y; // ntohll 

संपादित: जवाब का सुझाव है कि इस समस्या के बारे में सोचना गलत तरीका है: धारा बफ़र्स बस चरित्र दृश्यों के लिए पहुँच प्रदान, उनका काम प्रारूपित I/O या रूपांतरण नहीं करना है। मैं शायद एक छोटी बफर कक्षा लागू करूंगा जो रूपांतरण करने के लिए operator<< और operator>> के लिए आवश्यक अधिभार प्रदान करता है।

+0

यदि आपने अपने उदाहरण में 'बी 2' परिभाषित किया है तो आपका प्रश्न अधिक समझदार होगा। इसके अलावा, 'ऑपरेटर << (..., लंबे समय तक हस्ताक्षरित क्यों नहीं होगा) 'htons' का आह्वान करेगा? क्या आप इसे 'htonll' का आह्वान करना पसंद नहीं करेंगे? –

+0

धन्यवाद रॉब, मैंने बग को सही किया। – mavam

+3

मुझे लगता है कि आप गलत जगह पर समाधान की तलाश में हैं। जब तक फॉर्मेटर ('ostream') समाप्त हो गया है, यह 'streambuf' को बाइट्स की धारा पारित कर रहा है। ऐसा लगता है कि आप वास्तव में "बाइनरी" 'ओस्ट्रीम 'चाहते हैं यदि आउटपुट संख्याओं का बाइट ऑर्डर एक ऐसा मुद्दा है जिसे आप हल करने का प्रयास कर रहे हैं। –

उत्तर

7

नहीं, और मैं आपको बताऊंगा क्यों।

istream::operator>> और ostream::operator<< वर्णों की एक धारा पर काम करते हैं, जो उन्हें अपने मानव-पठनीय रूप से कंप्यूटर के मूल रूप में परिवर्तित करते हैं। streambuf अक्षरों की एक धारा प्रदान करने (या स्वीकार) को छोड़कर, उस रूपांतरण में बिल्कुल भाग नहीं लेता है।

इसे एक और तरीके से रखने के लिए, स्वरूपित I/O दिनचर्या चरित्र रूप से बाइनरी रूप में परिवर्तित हो जाती हैं।

आप एक बाइनरी रूप से दूसरे बाइनरी रूप में रूपांतरण की मांग कर रहे हैं। यह वही बात नहीं है, और stream स्वरूपित टेक्स्ट रूटीन देखने के लिए गलत जगह है।

कहा कि, आप अपने स्वयं के वर्ग कि operator<< और operator>> लागू करता है बना सकते हैं, और उन दिनचर्या नेटवर्क बाइट अदला-बदली करते हैं।

+1

अभी तक यह एक आम पैटर्न है, खासकर नेटवर्किंग में। पुस्तकालय एक समान सेवा की पेशकश कर रहा है? –

संबंधित मुद्दे

 संबंधित मुद्दे