各種api 的坑

2021-08-03 18:44:38 字數 1481 閱讀 7801

最近在做新的專案,設計打檔案傳輸問題,lua和c++互動。踩了不少坑,也收穫很多。

1.lual_tointeger 和lua_tonumber

在把大檔案的大小傳給c++時,用

lua_tointeger取出,導致計算出錯。後來經過仔細看了lua api文件,才發現,這個介面轉出的結果是整形,長度明顯不夠。最終只能用lua_tonumber解決問題。

lua_tointeger

lua_integer lua_tointeger (lua_state *l, int idx);

把給定索引處的 lua 值轉換為 lua_integer 

這樣乙個有符號整數型別。 這個 lua 值必須是乙個數字或是乙個可以轉換為數字的字串 否則,lua_tointeger

返回 0 。

如果數字不是乙個整數, 截斷小數部分的方式沒有被明確定義。

lua_tonumber

lua_number lua_tonumber (lua_state *l, int index);

把給定索引處的 lua 值轉換為 

lua_number

這樣乙個 c 型別

lua_number

typedef double lua_number;

lua 中數字的型別。 確省是 double ,但是你可以在 

luaconf.h

中修改它。

通過修改配置檔案你可以改變 lua 讓它操作其它數字型別

2.fseek和 _fseeki64

在上傳檔案時是分塊上傳,讀取檔案時就用到了fseek移動檔案指標的偏移,詭異的出錯了,每次讀取超過2g的檔案,fseek都失敗。long的最大值是2147483647

int fseek( file *stream, long offset, int origin ); 

int _fseeki64( file *stream, __int64 offset, int origin );

3.getfilesize 和getfilesizeex

第三個坑還是跟檔案大小有關,不熟悉win api,憑經驗,直接用了

getfilesize ,超過2g的檔案返回值又錯了。

typedef

union

_large_integer ; 

struct

u; longlong quadpart;} large_integer, *plarge_integer;

bool winapi getfilesizeex( _in_  handle         hfile, _out_ plarge_integer lpfilesize);

dword winapi getfilesize( _in_      handle  hfile, _out_opt_ lpdword lpfilesizehigh);

各種api介面

實用號碼歸屬地查詢 ip 位址,手機號碼 預設格式 http api.liqwei.com location 使用來訪者的 ip 位址 指定手機號碼格式 北京的號碼 可選引數 js js 輸出 預設為 0,可選值 1,0 備註 utf 8 編碼支援的格式 其它引數不變 城市天氣情況查詢 指定手機號碼...

KVM的各種坑

1.編譯的坑 費了老大勁,找到這幫人的郵件往來,才知道這裡面有乙個命令寫錯來,一行一行的修改之後,才得以通過編譯 記錄如下 diff git a qemu options.hx b qemu options.hx index 4bc9c85.3af60bf 100644 a qemu options...

for in 的各種坑

for in方法用來遍歷陣列或者物件的顯性屬性,就是說我們自己定義的屬性都是可以遍歷的,而物件固有的屬性,比如object.prototype.tostring是遍歷不出來的。for in方法簡潔好用,但依舊有一些需要注意的地方 1.遍歷順序 var b for var key in b for v...