⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 binarywriter.h

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 H
字号:
//// BinaryWriter.h//// $Id: //poco/1.2/Foundation/include/Poco/BinaryWriter.h#1 $//// Library: Foundation// Package: Streams// Module:  BinaryReaderWriter//// Definition of the BinaryWriter class.//// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.// and Contributors.//// Permission is hereby granted, free of charge, to any person or organization// obtaining a copy of the software and accompanying documentation covered by// this license (the "Software") to use, reproduce, display, distribute,// execute, and transmit the Software, and to prepare derivative works of the// Software, and to permit third-parties to whom the Software is furnished to// do so, all subject to the following:// // The copyright notices in the Software and this entire statement, including// the above license grant, this restriction and the following disclaimer,// must be included in all copies of the Software, in whole or in part, and// all derivative works of the Software, unless such copies or derivative// works are solely in the form of machine-executable object code generated by// a source language processor.// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER// DEALINGS IN THE SOFTWARE.//#ifndef Foundation_BinaryWriter_INCLUDED#define Foundation_BinaryWriter_INCLUDED#include "Poco/Foundation.h"#include <ostream>namespace Poco {class Foundation_API BinaryWriter	/// This class writes basic types in binary form into an output stream.	/// It provides an inserter-based interface similar to ostream.	/// The writer also supports automatic conversion from big-endian	/// (network byte order) to little-endian and vice-versa.	/// Use a BinaryReader to read from a stream created by a BinaryWriter.	/// Be careful when exchanging data between systems with different	/// data type sizes (e.g., 32-bit and 64-bit architectures), as the sizes	/// of some of the basic types may be different. For example, writing a	/// long integer on a 64-bit system and reading it on a 32-bit system	/// may yield an incorrent result. Use fixed-size types (Int32, Int64, etc.)	/// in such a case.{public:	enum StreamByteOrder	{		NATIVE_BYTE_ORDER        = 1, /// the host's native byte-order		BIG_ENDIAN_BYTE_ORDER    = 2, /// big-endian (network) byte-order		NETWORK_BYTE_ORDER       = 2, /// big-endian (network) byte-order		LITTLE_ENDIAN_BYTE_ORDER = 3  /// little-endian byte-order	};		BinaryWriter(std::ostream& ostr, StreamByteOrder byteOrder = NATIVE_BYTE_ORDER);		/// Creates the BinaryWriter.	~BinaryWriter();		/// Destroys the BinaryWriter.	BinaryWriter& operator << (bool value);	BinaryWriter& operator << (char value);	BinaryWriter& operator << (unsigned char value);	BinaryWriter& operator << (signed char value);	BinaryWriter& operator << (short value);	BinaryWriter& operator << (unsigned short value);	BinaryWriter& operator << (int value);	BinaryWriter& operator << (unsigned int value);	BinaryWriter& operator << (long value);	BinaryWriter& operator << (unsigned long value);	BinaryWriter& operator << (float value);	BinaryWriter& operator << (double value);#if defined(POCO_HAVE_INT64) && !defined(POCO_LONG_IS_64_BIT)	BinaryWriter& operator << (Int64 value);	BinaryWriter& operator << (UInt64 value);#endif	BinaryWriter& operator << (const std::string& value);	BinaryWriter& operator << (const char* value);		void write7BitEncoded(UInt32 value);		/// Writes a 32-bit unsigned integer in a compressed format.		/// The value is written out seven bits at a time, starting 		/// with the seven least-significant bits. 		/// The high bit of a byte indicates whether there are more bytes to be 		/// written after this one.		/// If value will fit in seven bits, it takes only one byte of space. 		/// If value will not fit in seven bits, the high bit is set on the first byte and 		/// written out. value is then shifted by seven bits and the next byte is written. 		/// This process is repeated until the entire integer has been written.#if defined(POCO_HAVE_INT64)	void write7BitEncoded(UInt64 value);		/// Writes a 64-bit unsigned integer in a compressed format.		/// The value written out seven bits at a time, starting 		/// with the seven least-significant bits. 		/// The high bit of a byte indicates whether there are more bytes to be 		/// written after this one.		/// If value will fit in seven bits, it takes only one byte of space. 		/// If value will not fit in seven bits, the high bit is set on the first byte and 		/// written out. value is then shifted by seven bits and the next byte is written. 		/// This process is repeated until the entire integer has been written.#endif	void writeRaw(const std::string& rawData);		/// Writes the string as-is to the stream.	void writeBOM();		/// Writes a byte-order mark to the stream. A byte order mark is		/// a 16-bit integer with a value of 0xFEFF, written in host byte-order. 		/// A BinaryReader uses the byte-order mark to determine the byte-order 		/// of the stream.	void flush();		/// Flushes the underlying stream.			bool good();		/// Returns _ostr.good();			bool fail();		/// Returns _ostr.fail();		bool bad();		/// Returns _ostr.bad();			std::ostream& stream() const;		/// Returns the underlying stream.			StreamByteOrder byteOrder() const;		/// Returns the byte ordering used by the writer, which is		/// either BIG_ENDIAN_BYTE_ORDER or LITTLE_ENDIAN_BYTE_ORDER.private:	std::ostream& _ostr;	bool          _flipBytes;};//// inlines//inline std::ostream& BinaryWriter::stream() const{	return _ostr;}inline bool BinaryWriter::good(){	return _ostr.good();}inline bool BinaryWriter::fail(){	return _ostr.fail();}inline bool BinaryWriter::bad(){	return _ostr.bad();}inline BinaryWriter::StreamByteOrder BinaryWriter::byteOrder() const{#if defined(POCO_ARCH_BIG_ENDIAN)	return _flipBytes ? LITTLE_ENDIAN_BYTE_ORDER : BIG_ENDIAN_BYTE_ORDER;#else	return _flipBytes ? BIG_ENDIAN_BYTE_ORDER : LITTLE_ENDIAN_BYTE_ORDER;#endif}} // namespace Poco#endif // Foundation_BinaryWriter_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -