型別不匹配引發的乙個issue

2021-03-31 08:56:30 字數 1070 閱讀 9479

vs

2003.***

在使用setfilepointerex

設定檔案位置的時候,需要使用到

longlong型別

,然後在讀一段

dwread

長的資料之後,需要把檔案位置復位:

large_integer

lnfilepos

.quadpart = 0x00 - dwread;

setfilepointerex

(…);

問題就出現了,這段**是有問題的。因為

0x00

- dwread

對lnfilepos.quadpart

來說並不是乙個負數。

我們看一下彙編**:

關鍵在mov

dword ptr [lnfileposition], eax

上,它是直接寫入記憶體,而高位ecx簡單的為0,沒有進行任何的擴充套件。在記憶體中,

lnfilepostion佔8

個位元組,寫入後就是這樣:

所以當再次引用

lnfilepostion

的時候,

lnfilepostion = 00000000

fffffc00

,而不是期望的

ffffffff fffffc00。

下面是新增型別轉換後的彙編**(雖然是在

debug

下,但vc2003

.***

生成的彙編**實在有點拙劣)。

其中sbb 0

, 0產生

0xffffffff。

不過這種情況只在表示式包含變數的時候存在,如果兩個立即數,比如:

large_integer

lnfilepos

.quadpart = 0x00 - 0x400;

vc可以正確處理。

乙個int型別引發的bug

今天我在專案開發中,遭遇了乙個莫名其妙的問題,概括加抽象後形成如下問題 在使用mybatis的xml語句實現dao層介面 listselectbysome param record personexample example 時候,我寫的xml中有這麼一句 if test record.id nul...

乙個int型別引發的bug

今天我在專案開發中,遭遇了乙個莫名其妙的問題,概括加抽象後形成如下問題 在使用mybatis的xml語句實現dao層介面 listselectbysome param record personexample example 時候,我寫的xml中有這麼一句 if test record.id nul...

記錄實習第乙個issue

intel實感深度攝像頭 二自由度雲台 用於採集深度圖和彩色圖,v 60 30 h 90 90 人臉識別攝像頭 人臉識別模組 實現人臉註冊 人臉識別 音響 雙麥克風 科大訊飛的語音互動模組 用於語音互動 雷射雷達 超聲感測器 紅外感測器 用於測距 路由器 用於通訊 伺服電機及電機驅動模組 用於運動控...