PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
[問題] Little/Big Endian判斷
作者:
airwaves
(airwaves)
2019-10-19 21:19:40
不好意思,問一個比較粗淺的問題>.<
int main(void)
{
short int a = 0x1234;
char *p = (char *)&a; =>為什麼一定要轉成char pointer呢?
printf("p=%#hhx\n",*p);
if(*p == 0x34)
printf("Little endian \n");
else if(*p == 0x12)
printf("Big endian \n");
else
printf("Unknow endian \n");
return 0;
}
作者: jerryh001
2019-10-19 21:27:00
讓他視為char array然後看p[0]寫啥就知道是哪種了
作者:
Schottky
(順風相送)
2019-10-19 23:01:00
這樣才能把兩個 byte 拆開來看啊另一個方法是用 union,雖說是換湯不換藥,原理相同
作者:
dces4212
(flawless)
2019-10-20 03:48:00
不強制轉啊 只是編譯器會警告 跟你說你把記憶體位置給不同資料型態的指標 換句話說 他在警告你這樣在做valueof (dereference)操作的時候是取一個byte 而非4個byte
作者:
lovejomi
(JOMI)
2019-10-20 09:54:00
借此問個問題, short a=0xff00; char b=a;的值會因為endian而不一樣嗎?原理是什麼
作者:
LPH66
(-6.2598534e+18f)
2019-10-20 10:33:00
樓上這種不會因 endianess 而不同, 所以原 PO 問的這寫法才會需要借用指標來做一個(其實標準沒說行不行的)間接存取
作者:
lovejomi
(JOMI)
2019-10-20 12:07:00
看到這種轉型的都覺得很可能是ub...到底是不是ub難道只能去查標準嗎
作者:
CoNsTaR
((const *))
2019-10-20 13:50:00
樓上也可以像 LPH66 大大一樣通通背起來 XD
作者:
ibmibmibm
(BestSteve)
2019-10-22 16:13:00
轉型成char*讀內容是ub沒錯,要用memcpy複製出來
https://www.youtube.com/watch?v=_qzMpk-22cc
繼續閱讀
[問題] 一維陣列 -> 二維函數
Hack
[問題] cin.ignore()無參數使用
jack41402
[問題] 為甚麼會segmentation fault?
d630200x
[問題] linux下執行c的命令參數問題
roger840410
[問題] zeromq 可以multithread多重訂閱嗎~
OfficeGL
[問題] c++ class作業 卡關
shiauyeu
[問題] 特殊的#define
Hack
Re: [問題] 有人做過粗糙表面的瑕疵檢測嗎?
Schottky
[問題] Network作業求教
D122
Re: [問題] 有人做過粗糙表面的瑕疵檢測嗎?
popen
Links
booklink
Contact Us: admin [ a t ] ucptt.com