POCO 型別和位元組序

2021-07-05 06:01:32 字數 2871 閱讀 4002



固定長度的整型,位元組序轉換,以及any/dynamicany型別

固定長度整型

poco定義了一些固定長度的整型:

#include "poco/types.h"

(poco/foundation.h自動包含了以上檔案)

poco::int8, poco::int16, poco::int32, poco::int64

poco::uint8, poco::uint16, poco::uint32, poco::uint64

poco::intptr, poco::uintptr: 固定長度的整型指標型別(32/64位)

跨平台的**,建議使用這些固定長度的整型.

內建變數長度

poco定義了兩個巨集來判斷long和指標型別的長度:

poco_ptr_is_64_bit   如果指標型別長度為64位,則將定義此巨集

poco_long_is_64_bit  如果long是64位,將定義此巨集

位元組序

poco可以輕易處理好位元組序的問題

使用以下巨集定義來判斷位元組序:

poco_arch_little_endian 如果是低位元組序,將定義此巨集

poco_arch_big_endian 如果是高位元組序,將定義此巨集

位元組序轉換

poco::byteorder類提供了一些靜態方法來進行位元組序轉換:

#include "poco/byteorder.h"

所有的方法都對int16, uint16, int32, uint32, int64 and uint64可用.

intxx flipbytes(intxx value)

將位元組序從高到低轉換

intxx tobigendian(intxx value) 從主機位元組序轉為高位元組序

intxx tolittleendian(intxx value) 從主機位元組序轉為低位元組序

intxx frombigendian(intxx value) 將高位元組序轉為主機位元組序

intxx fromlittleendian(intxx value)  將低位元組序轉為主機位元組序

intxx tonetwork(intxx value) 將主機位元組序轉為網路位元組序

intxx fromnetwork(intxx value) 將網路位元組序轉為主機位元組序

網路位元組序是高位元組序

以上所有方法都定義為inline,非常高效.

同時,編譯器也將優化不必要的一些轉換。

#include "poco/byteorder.h"

#include

using poco::byteorder;

using poco::uint16;

int main(int argc, char** argv)

any型別

#include "poco/any.h"

poco::any可以處理所有的內建或使用者定義的資料型別。

poco::any支援值語義

值可以以型別安全的方式提取

為便於資料轉換,必須先知道值的資料型別

poco::anycast(),poco::refanycast()用於進行型別轉換.

#include "poco/any.h"

#include "poco/exception.h"

using poco::any;

using poco::anycast;

using poco::refanycast;

int main(int argc, char** argv)

catch (poco::badcastexception&)

return 0; }

dynamicany型別

#include "poco/dynamicany.h"

poco::dynamicany可處理任何型別的值。(自定義類需從dynamicanyholder派生。)

poco::dynamicany支援值語義;

值可以以型別安全的方式提取;

可安全的在不同型別間轉換(標準型別,std::string)。

dynamicany: convert() 與 extract() 比較

t convert();

void convert(t& val);

operator t ()

返回乙個複製物件

自動轉換

比any的轉換要慢

const t& extract();

返回原物件的引用

不自動轉換

與any轉換一樣快

dynamicany轉換規則

整型到浮點型別的轉換會丟失資料精度

字串到字元,允許轉換並會被截斷

#include "poco/dynamicany.h"

#include "poco/exception.h"

using poco::dynamicany;

int main(int argc, char** argv)

catch (poco::badcastexception&)

return 0; }

any與dynamicany的區別

any可以應對任何型別,但從any取出資料時,必須知道原型別。

dynamicany可以處理所有以dynamicanyholder規範的型別

只支援基礎型別和std::string顯式和隱式型別轉換

POCO 型別和位元組序

固定長度的整型,位元組序轉換,以及any dynamicany型別 固定長度整型 poco定義了一些固定長度的整型 include poco types.h poco foundation.h自動包含了以上檔案 poco int8,poco int16,poco int32,poco int64 p...

POCO中的資料型別和位元組序

poco中的資料型別和位元組序 概要 固定長度的整數型別,位元組序轉換,和any dynamicany型別 1 固定長度的整數型別 poco定義了固定長度的整數型別 include poco types.h 自動包含在 poco foundation.h 中 分別是poco int8,poco in...

位元組序和網路位元組序

1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...