我試圖創建一個文件,從一個指針採取二進制條目,但我遇到了一些轉換問題。如何使用二進制標準中的指針創建具有十六進制信息(如char)的文件?
我的功能就是一個:
pSec
指向與我想寫的信息的第一個地址。
int StoreFile::setK(unsigned int Slot, void* pSec, unsigned int Len) {
int Ret = 0;
char tLen[sizeof(Len)];
char cSec[Len*2], *Sec;
static char FName[fs_PathMaxLg];
snprintf(FName, sizeof(FName)-1, "%s/Store.INI", _Dir);
static char Section[2][20];
snprintf(Section[0], sizeof(Section[0])-1, "%lu_SIZE", Slot);
snprintf(Section[1], sizeof(Section[1])-1, "%lu_DATA", Slot);
do {
在這裏,我嘗試檢查所有地址,傳遞信息到char*
,但我想那會作爲一個十六進制(的char
數組以十六進制的內容)這一信息,但我並沒有在成功傳遞來自指向char
的地址的信息。
BYTE *ptr = (BYTE*)pSec;
for (int i = 0; i != Len; i++) {
Sec = strdup((const char*)ptr[i]);
// snprintf(Sec, 2, "%2.2x", ptr[i]);
// cSec = (char*)pSec;
// pSec += 1;
Sec += 2;
}
snprintf(tLen, sizeof(Len), "%x", Len);
這裏是另一個函數,它的字符數組寫入到文件,問題只是寫Sec
時。
Ret = WriteProfile(FName, "STOCK", Section[0], tLen);
if (Ret != 1) {
break;
}
Ret = WriteProfile(FName, "STOCK", Section[1], Sec);
if (Ret != 1) {
break;
}
Ret = 0;
} while(0);
您有任何建議來改善此代碼嗎? 我嘗試了很多東西。
如果皮秒不是零結尾的字符串,不要試圖在的strdup使用它。 – simon