我试图创建一个文件,从一个指针采取二进制条目,但我遇到了一些转换问题。如何使用二进制标准中的指针创建具有十六进制信息(如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