二進制流包含int型和char型。比如前0-1是兩個char型別,2-5、6-9是兩個int型別,10-11是兩個char型別。在c++或者Qt中,有不使用memcpy函式來對他們進行解碼的方法么?有的話要怎么做呢?
uj5u.com熱心網友回復:
位元組操作自己寫回圈寫一個結構體然后用結構體賦值實作
其實都是memcpy 并且沒memcpy遍歷
那么問題來了
為什么要自討苦吃?
uj5u.com熱心網友回復:
qt有QDataStream, 不過我猜它的內部也是用memcpy來實作的。不過用戶使用的時候倒是看不到mem了。uj5u.com熱心網友回復:
//二進制流包含int型和char型。比如前0-1是兩個char型別,2-5、6-9是兩個int型別,10-11是兩個char型別。在c++或者Qt中,有不使用memcpy函式
char buf[12];
char a,b;
int c,d;
char e,f;
a=buf[0];
b=buf[1];
c=(int)(
((unsigned int)buf[2])<<24 |
((unsigned int)buf[3])<<16 |
((unsigned int)buf[4])<< 8 |
((unsigned int)buf[5])
);
d=(int)(
((unsigned int)buf[6])<<24 |
((unsigned int)buf[7])<<16 |
((unsigned int)buf[8])<< 8 |
((unsigned int)buf[9])
);
e=buf[0];
f=buf[1];
c,d的值如果不對,把2345和6789的順序顛倒一下(大小端問題)
uj5u.com熱心網友回復:
e=buf[10];f=buf[11];
uj5u.com熱心網友回復:
這叫格式化。結構體一個作用就是給你格式化的。
struct A
{
char
int
int
char
char
}
A *pA = new A();
pA = (A*)&buffer;
uj5u.com熱心網友回復:
A *pA = new A();
pA = (A*)&buffer;
寫錯了。記憶體泄漏了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188281.html
標籤:C++ 語言
上一篇:BCB如何獲取某欄位在第n個出現的位置的左邊或者右邊的欄位
下一篇:關于二級指標的問題
