亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3475 | 回復(fù): 9
打印 上一主題 下一主題

困惑了好幾天的問題:從二進制文件讀一個短整形數(shù),負數(shù)不正常 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-10-22 12:18 |只看該作者 |倒序瀏覽
perl新手,正在用Tk做一個界面。

讀一個二進制文件的時候,遇到一個問題,查了好多資料,也沒解決。具體是這樣:

先把240字節(jié)的數(shù)據(jù)讀到一個buffer里:

if(!read(BIN_FILE,$t_header,240)){

        print "error!";

}

這段240字節(jié)dump出來就是這樣:
  1:00000000   00000001   0000001B   00000000   
005:00000000   00000012   00000001   00010000   
009:00010000   00000000   00000000   00000000   
013:00000000   00000000   00000000   00000000   
017:00000000   D8F0FF9C   01CEB432   19065BC0   
021:00000000   00000000   00030000   00000000   
025:00000000   00000000   00000000   FF9C0012   
029:0012041B   07D00000   00000000   00000000   
033:00000000   00000000   00000000   00000000   
037:00000000   00000000   00000000   00000000   
041:00000000   00000000   00000000   00000000   
045:00000000   00000000   00000000   00000000   
049:00000000   00000000   00000000   00000000   
053:00000000   00000000   00000000   00000000   
057:00000000   00000000   00000000   00000000

我要讀的就是紅色的部分FF9C,這樣讀的:

($tmp,$s_t,$tmp)=unpack("H216 H4 H*",$t_header);

把FF9C讀到$s_t里,
FF9C的值本來是-100,可打印出來卻不是:

printf "start time=%d\n",hex($s_t);

結(jié)果是:
start time=65436

查了幾天的資料,還是沒搞明白。如果讀的短整形數(shù)是正值,
則打印出來的就是正確的。



哪位明白高手,指點一下

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [報告]
發(fā)表于 2008-10-22 12:39 |只看該作者
printf "start time=%hd\n",hex($s_t);

論壇徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辭舊歲徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
3 [報告]
發(fā)表于 2008-10-22 12:41 |只看該作者
為啥要當(dāng)成有符號數(shù)?

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報告]
發(fā)表于 2008-10-22 12:49 |只看該作者
unpack 32 位有符號數(shù)不能用 H4,得用 i。

論壇徽章:
0
5 [報告]
發(fā)表于 2008-10-22 15:41 |只看該作者

回復(fù) #3 ynchnluiti 的帖子

那個位置存儲的就是一個有符號的數(shù)

論壇徽章:
0
6 [報告]
發(fā)表于 2008-10-22 15:42 |只看該作者

回復(fù) #4 flw 的帖子

不是32的的,是一個16位的有符合的整形。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
7 [報告]
發(fā)表于 2008-10-22 15:51 |只看該作者
原帖由 fanfan 于 2008-10-22 15:42 發(fā)表
不是32的的,是一個16位的有符合的整形。

16 位的用 s。

論壇徽章:
0
8 [報告]
發(fā)表于 2008-10-22 16:05 |只看該作者
用s就有big-endian 或者small-endian的問題了

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
9 [報告]
發(fā)表于 2008-10-22 16:48 |只看該作者
原帖由 fanfan 于 2008-10-22 16:05 發(fā)表
用s就有big-endian 或者small-endian的問題了

只要和 Real World 之間有 IO,就會有這個問題。你好好整理整理思路吧。我實在不想再說什么了。

BTW:網(wǎng)絡(luò)格式用 n。

[ 本帖最后由 flw 于 2008-10-22 16:50 編輯 ]

論壇徽章:
0
10 [報告]
發(fā)表于 2008-10-22 18:56 |只看該作者
先謝謝了。

本來想偷個懶的

從c轉(zhuǎn)到perl,在數(shù)據(jù)類型上還真不習(xí)慣
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP