Re: [問題] bitwise 如何取高低位元

看板C_and_CPP (C/C++)作者 (說好的性福呢?)時間16年前 (2009/10/26 22:30), 編輯推噓4(4011)
留言15則, 4人參與, 最新討論串3/3 (看更多)
其實我要做的事情是這樣的... 這是一算h264 bitstream, 我要在裡面找 0x01, 0x65 這兩個數值,但因為儲存的型態是unsigned long 32bits, 我想將它拆成兩個16bits的尋找... 那下面是我實驗所碰到的怪地方, 我會在check是否跟endian有關.. 或是, 是否有建議的做法呢? 謝謝! ※ 引述《pilipalabon (說好的性福呢?)》之銘言: : 假設今天我有一筆資料為 : ULong x = 0xe8a105f4 : UShort x1 = (UShort)x; : UShort x2 = (x>>16); : x1 == 0x5f4; //low : x2 == ffffe8a1; //high : 我在使用 UShort x2 = (x>>16) & 0x0000FFFF; : 依然不行.. : 但我用 : printf("%x\n", x2 & 0x0000FFFF); : 這樣x2 == e8a1 : 請問要如何才能取到高位址呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.201.105

10/26 22:33, , 1F
要不要改成 unsigned long 看看
10/26 22:33, 1F

10/26 22:38, , 2F
unsigned signed long?? typo還是真的這樣定義啊?_?
10/26 22:38, 2F

10/26 22:40, , 3F
感覺像是 bit shift 或者 printf format 的問題
10/26 22:40, 3F

10/26 22:40, , 4F
用 %hx 搞不好就對了
10/26 22:40, 4F
Sorry, 是 unsigned long ... >< ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/26 22:45)

10/26 22:45, , 5F
x2 >> 16; printf("%0x\n", x2); -> 這是你要的嗎?
10/26 22:45, 5F

10/26 22:46, , 6F
感謝樓上幾位,我只是想知道說說 x>>16不應該會有
10/26 22:46, 6F

10/26 22:47, , 7F
前面的0xffff~~, 如果我這樣子做bitwise是正確的
10/26 22:47, 7F

10/26 22:48, , 8F
但只是printf的格式錯誤而造成的, 那當然沒問題了
10/26 22:48, 8F

10/26 22:48, , 9F
現在下班沒電腦試了,明天試試!謝謝
10/26 22:48, 9F

10/26 23:00, , 10F
應該也不是printf的問題, 小弟我有用DevC++搭%X印了,
10/26 23:00, 10F

10/26 23:01, , 11F
結果也是好的說@_@" 您全用ULong來放(都放低位), 甚至
10/26 23:01, 11F

10/26 23:02, , 12F
用printf+%u直接印試試?_?
10/26 23:02, 12F

10/27 13:44, , 13F
今天測試了一下是印錯還是內容真的錯了
10/27 13:44, 13F

10/27 13:45, , 14F
結果是印錯,內容實際是0xe8a1
10/27 13:45, 14F

10/27 13:45, , 15F
謝謝各位址點!
10/27 13:45, 15F
文章代碼(AID): #1AvR9l-T (C_and_CPP)
文章代碼(AID): #1AvR9l-T (C_and_CPP)