[英]c++ best way to compare byte array to struct
我需要幫助。 我有一個unsigned char *
並說我有一個結構
struct{
int a=3;
char b='d';
double c=3.14;
char d='e';
} cmp;
unsigned char input[1000];
l= recv(sockfd,input , sizeof(cmp),0);
我想比較cmp和輸入。 什么是最快的方式?
非常感謝提前。
如果編譯器保證結構中的字段之間沒有間隙(通常由於打包而發生),或者您可以使用#pragna來取消任何此類間隙,那么您可以通過以下任一方式進行比較:
memcmp(&cmp, input, sizeof(stuct ThesSruct));
或者,我的首選:
cmp == *(struct TheStruct *)input // provided the struct doesn't contain pointers.
但更安全的方法是逐場比較。 甚至更多,准備從原始輸入中提取整數,浮點數等的特殊函數。 例如,在索引n處提取int可能很簡單
*(int *)&input[n]
但它可能更復雜,比如將字符移動到8,16,24位。
簡而言之,訪問通信數據必須以最強大的方式完成,檢查每個基本元素而不是假設任何東西。
試試reinterpret_cast。 這將允許您隨意將char *轉換為cmp * http://msdn.microsoft.com/en-us/library/e0w9f63b.aspx
在一般情況下詹姆斯Kantzes的評論是正確的,你不能這樣比較。 除其他外,這是由於字節填充。
但是在具體情況下有以下假設;
發件人直接從結構發送它。
cmp c{ ...set variables... }; send(sockfd, (char*)&c, sizeof(c));
簡而言之,這是一種運輸結構的非常脆弱的方式,除了簡單的測試或快速黑客之外,你不應該做任何事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.