源代码: HANDLE hFile;
char IpBuffer[1];
IpBuffer[0]=101010;
DWORD dwWrites;
hFile=CreateFile("1.bin",GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
BOOL bRet = ::WriteFile(hFile,IpBuffer,strlen(IpBuffer),&dwWrites,NULL);
if (bRet)
{
MessageBox("WriteFile 写文件成功");
}
CloseHandle(hFile);
我是想将二进制'101010'写入文件 1.bin 写入后 1.bin 使用查看器十六进制查看时应该显示十六进制的‘2A’
可是程序执行后,使用查看器看到的确是'92CCCCCCE4' 。求教问题出在哪里,如何修改。
本人是菜鸟,请多关照!!!

解决方案 »

  1.   

    strlen(IpBuffer)这样调用错误。strlen参数应该是以'\0'结尾的字符串。IpBuffer并没有以'\0'结尾。
      

  2.   


    我改写为 WriteFile(hFile,IpBuffer,1,&dwWrites,NULL); 也不对啊,生成的文件查看时显示'92'啊?
      

  3.   

    101010赋给char类型变量溢出了,因为char类型最大值只能为255.
      

  4.   


    请教了,我该使用什么赋值才对??? int 也不可以啊???
      

  5.   

    试下这样#include <bitset>
    #include <iostream>
    BOOL CMFCDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); std::string s("101010");
    std::bitset<32> b(s); DWORD a = b.to_ulong()
    HANDLE hFile;
    DWORD dwWrites;
    hFile=CreateFile("1.bin",GENERIC_READ|GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    BOOL bRet = ::WriteFile(hFile,&a,sizeof(a),&dwWrites,NULL);
    if (bRet)
    {
    MessageBox("WriteFile 写文件成功");
    }
    CloseHandle(hFile);