OpenRTMFP/Cumulus Primer(17)AMF解析之AMFReader(續1)
OpenRTMFP/Cumulus Primer(17)AMF解析之AMFReader(續1)
- Author: 柳大·Poechant(鍾超)
- Email: zhongchao.ustc#gmail.com (#->@)
- Blog:Blog.CSDN.net/Poechant
- Date: April 24th, 2012
1 解析 AS3 Null
void AMFReader::readNull() {
先 reset 一下是慣例,就像糗百上的割一樣。。
reset();
AMF 資料型別
AMF::Type type = followingType();
如果是 Null,跳過該位元組,並返回
if (type == AMF::Null) {
reader.next(1);
return;
}
判斷錯誤
ERROR("Type %.2x is not a AMF Null type",type);
}
2 解析 AS3 Number
double AMFReader::readNumber() {
慣例
reset();
型別
AMF::Type type = followingType();
Null 會被悲催的跳過
if (type == AMF::Null) {
reader.next(1);
return 0;
}
不是 Number 呀 :(
if (type != AMF::Number) {
ERROR("Type %.2x is not a AMF Number type",type);
return 0;
}
跳過該位元組吧
reader.next(1);
返回吧,返回之前還用到 Poco::BinaryReader 的運算子,注意 AS3 中的 Number 就是 C++ 的 double
double result;
reader >> result;
return result;
}
3 解析 AS3 Integer
Int32 AMFReader::readInteger() {
reset、型別:
reset();
AMF::Type type = followingType();
Null 的話。。
if (type == AMF::Null) {
reader.next(1);
return 0;
}
不是 Integer 或者 Number 的話。。。
if (type != AMF::Integer && type != AMF::Number) {
ERROR("Type %.2x is not a AMF Integer type",type);
return 0;
}
跳過吧。
reader.next(1);
終於是 Number 了。
if (type == AMF::Number) {
double result;
reader >> result;
return (Int32)result;
}
讀一個變長的 32 位無符號整數:
// Forced in AMF3 here!
UInt32 value = reader.read7BitValue();
如果大於 3.5 個位元組所能表示的最大無符號整數值(268435455是0xFFFFFFF),則減去 0x2FFFFFFF(這還不是太理解,有能解釋的朋友給留個言,或者發email給我^_^)
if (value > 268435455)
value -= (1 << 29);
return value;
}
4 解析 AS3 Boolean
bool AMFReader::readBoolean() {
慣例:
reset();
AMF::Type type = followingType();
如果是 Null。。
if (type == AMF::Null) {
reader.next(1);
return false;
}
居然不是 Boolean 的話。。
if (type != AMF::Boolean) {
ERROR("Type %.2x is not a AMF Boolean type",type);
return false;
}
如果是 AMF3 的話,返回 true 或者 false:
if (_amf3)
return reader.read8()== AMF3_FALSE ? false : true;
不是 AMF3 就是 AMF0 嘍:
reader.next(1);
return reader.read8()==0x00 ? false : true;
}
-
轉載請註明來自柳大的CSDN部落格:Blog.CSDN.net/Poechant
-
相關文章
- OpenRTMFP/Cumulus Primer(18)AMF解析之AMFReader(續2)
- OpenRTMFP/Cumulus Primer(16)AMF解析之AMFReader
- OpenRTMFP/Cumulus Primer(14)AMF解析之PacketReader/Writer
- OpenRTMFP/Cumulus Primer(9)AMF解析之BinaryReader/Writer
- OpenRTMFP/Cumulus Primer(15)AMF解析之資料型別定義資料型別
- OpenRTMFP/Cumulus Primer(9)AMF 處理方式解析——BinaryReader/Writer
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續1)Server
- OpenRTMFP/Cumulus Primer(5)CumulusServer啟動流程分析(續)Server
- OpenRTMFP/Cumulus Primer(6)CumulusServer啟動流程分析(續2)Server
- OpenRTMFP/Cumulus Primer(7)CumulusServer啟動流程分析(續3)Server
- OpenRTMFP/Cumulus Primer(7)CumulusServer 啟動流程分析(續3)Server
- OpenRTMFP/Cumulus Primer(1)入門介紹與部署CumulusServerServer
- OpenRTMFP/Cumulus Primer(4)CumulusServer啟動流程分析Server
- OpenRTMFP/Cumulus Primer(13)IO管理之區域性記憶體片記憶體
- OpenRTMFP/Cumulus Primer(8)CumulusServer主程式主迴圈分析Server
- OpenRTMFP/Cumulus Primer(2)用Lua編寫HelloWorld應用擴充套件CumulusServer套件Server
- OpenRTMFP/Cumulus Primer(19)獨立使用CumulusLib時的執行緒安全Bug執行緒
- OpenRTMFP/Cumulus Primer(21)經由伺服器的釋出/訂閱流程的關鍵點伺服器
- OpenRTMFP/Cumulus Primer(23)執行緒邏輯分析之二:RTMFPManager對RTMFPServer的影響執行緒Server
- OpenRTMFP/Cumulus Primer(22)執行緒邏輯分析之一:RTMFPServer執行緒的啟動和等待執行緒Server
- 17_深入解析Oracle undo原理(1)_transactionOracle
- AMF解析遇上XXE,BurpSuite也躺槍UI
- C++ Primer 課後習題解析C++
- C++ Primer Plus隨記1C++
- Objective-C Primer(1)Get started!Object
- 持續改進之技術篇#1
- c++ primer 之stringC++
- PHP/MySQL Dev. Primer (1) Establish Env.PHPMySqldev
- Java雜記17—String全面解析Java
- SQL之17深入group bySQL
- 測試題14(答案解析13-17)
- day 17 – 1 遞迴函式遞迴函式
- 初學者(17) (1千字)
- Part1 17個題目
- 新手入門AMF協議基礎全解協議
- ClickHouse(17)ClickHouse整合JDBC表引擎詳細解析JDBC
- oracle 筆記(續1)Oracle筆記
- day 17 物件導向作業1物件