VC中如何将十六进制数据保存为一个jpg图片文件
我现在有一段十六进制数据,开头为FFD8FFE000104A结尾为FFD9经过其他软件转换可以正确显示图片内容但是我在代码中保存时,文件可以创建,用记事本打开里面全是十六...
我现在有一段十六进制数据,开头为FFD8FFE000104A结尾为FFD9
经过其他软件转换可以正确显示图片内容但是我在代码中保存时,文件可以创建,用记事本打开里面全是十六进制数,但是不能预览不能显示图片,以下是代码
HANDLE hFile = CreateFile(L"D:\\abc.jpg",GENERIC_WRITE,FILE_SHARE_READ,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
DWORD dwLen ;
WriteFile(hFile,pData->m_pBuf,pData->m_dwLen,&dwLen,NULL) ; // pData结构中包含十六进制数据及长度,可以确保数据有效
CloseHandle(hFile);
非常棘手的问题困扰了我很多天了,希望哪位高人能够指点一二 展开
经过其他软件转换可以正确显示图片内容但是我在代码中保存时,文件可以创建,用记事本打开里面全是十六进制数,但是不能预览不能显示图片,以下是代码
HANDLE hFile = CreateFile(L"D:\\abc.jpg",GENERIC_WRITE,FILE_SHARE_READ,
NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
DWORD dwLen ;
WriteFile(hFile,pData->m_pBuf,pData->m_dwLen,&dwLen,NULL) ; // pData结构中包含十六进制数据及长度,可以确保数据有效
CloseHandle(hFile);
非常棘手的问题困扰了我很多天了,希望哪位高人能够指点一二 展开
1个回答
展开全部
把十六进制当ASCII处理了
int CharToInt(char ch)
{
if ((ch >= '0') && (ch <= '9'))
return ch - '0';
else
if((ch >= 'a') && (ch <= 'f'))
return ch - 'a' + 10;
else
if ((ch >= 'A') && (ch <= 'F'))
return ch - 'A' + 10;
else
return -1;
}
BOOL HexToBYTE(BYTE *byteBuf, INT byteLen, char *hexBuf, INT hexLen)
{
if(byteLen > hexLen/2)
return FALSE;
int byte1, byte2;
for(int i = 0; i < byteLen; i++)
{
byte1 = CharToInt(hexBuf[2*i]);
byte2 = CharToInt(hexBuf[2*i + 1]);
if(byte1 == -1 || byte2 == -1)
return FALSE;
byteBuf[i] = byte1 * 16 + byte2;
}
return TRUE;
}
int CharToInt(char ch)
{
if ((ch >= '0') && (ch <= '9'))
return ch - '0';
else
if((ch >= 'a') && (ch <= 'f'))
return ch - 'a' + 10;
else
if ((ch >= 'A') && (ch <= 'F'))
return ch - 'A' + 10;
else
return -1;
}
BOOL HexToBYTE(BYTE *byteBuf, INT byteLen, char *hexBuf, INT hexLen)
{
if(byteLen > hexLen/2)
return FALSE;
int byte1, byte2;
for(int i = 0; i < byteLen; i++)
{
byte1 = CharToInt(hexBuf[2*i]);
byte2 = CharToInt(hexBuf[2*i + 1]);
if(byte1 == -1 || byte2 == -1)
return FALSE;
byteBuf[i] = byte1 * 16 + byte2;
}
return TRUE;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询