影響我知道這可能是一個愚蠢的問題,但我是一個新手,C++開發人員,我需要對字節序一些澄清。字節序的C++代碼
我要實現依賴於SCTP協議,以便兩個不同的機器(基於一個ARM,和基於其他英特爾)之間進行通信的通信接口。
目的是:
- 編碼消息轉換成字節流要在套接字上發送(I使用uint8_t的載體,並且被定位-taking護理分裂UINT16的不同字段的每個字節/ 32/64到單個字節 - 遵循big-endian約定)
- 通過套接字發送字節流給接收方(使用stcp)
- 檢索流並解析它以便用正確的元素填充消息對象由標題+電視信息元素表示)
我在哪裏可以有問題,在接口將要使用的2臺機器的底層架構的字節順序混亂。 我認爲照顧將對象拆分爲單個字節並使用big-endian進行定位可能會阻止在到達時流的表示方式不同,對吧?或者我錯過了什麼?
另外,我在懷疑多字節變量的C++表示的角色,例如:
uint16_t var=0x0123;
//low byte 0x23
uint8_t low = (uint8_t)var;
//hi byte 0x01
uint8_t hi = (uint8_t)(var >> 8);
這段代碼是依賴字節順序或不?即如果我工作在一個big-endian機器上,我認爲上面的代碼是可以的,但是如果它是little-endian,我會按不同的順序來獲取這些字節嗎?
我搜索已經爲這樣的問題,但沒人給我一個明確答覆,所以我仍然懷疑這一點。
先謝謝大家,祝你有個美好的一天!
'reinterpret_cast(&var)[0]'將根據字節順序而不同。 –
Jarod42
您可以'reinterpret_cast var'來避免冗長而混亂的語法。 –
patatahooligan
現在我想起來了,'uint8_t'不一定是'unsigned char'的typedef,所以將'uint16_t'的一部分重新解釋爲'uint8_t'實際上是未定義的。 – patatahooligan