看板 C_and_CPP 關於我們 聯絡資訊
其實我要做的事情是這樣的... 這是一算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
goliathplus:要不要改成 unsigned long 看看 10/26 22:33
VictorTom:unsigned signed long?? typo還是真的這樣定義啊?_? 10/26 22:38
goliathplus:感覺像是 bit shift 或者 printf format 的問題 10/26 22:40
goliathplus:用 %hx 搞不好就對了 10/26 22:40
Sorry, 是 unsigned long ... >< ※ 編輯: pilipalabon 來自: 59.127.201.105 (10/26 22:45)
tropical72:x2 >> 16; printf("%0x\n", x2); -> 這是你要的嗎? 10/26 22:45
pilipalabon:感謝樓上幾位,我只是想知道說說 x>>16不應該會有 10/26 22:46
pilipalabon:前面的0xffff~~, 如果我這樣子做bitwise是正確的 10/26 22:47
pilipalabon:但只是printf的格式錯誤而造成的, 那當然沒問題了 10/26 22:48
pilipalabon:現在下班沒電腦試了,明天試試!謝謝 10/26 22:48
VictorTom:應該也不是printf的問題, 小弟我有用DevC++搭%X印了, 10/26 23:00
VictorTom:結果也是好的說@_@" 您全用ULong來放(都放低位), 甚至 10/26 23:01
VictorTom:用printf+%u直接印試試?_? 10/26 23:02
pilipalabon:今天測試了一下是印錯還是內容真的錯了 10/27 13:44
pilipalabon:結果是印錯,內容實際是0xe8a1 10/27 13:45
pilipalabon:謝謝各位址點! 10/27 13:45