0x016FC30B  5b 73 68 6f 70 5d 0d 0a 63 6f 64 65 20 3d 20 31  [shop]..code = 1
0x016FC31B  30 34 0d 0a 53 68 6f 70 4e 61 6d 65 20 3d 20 31  04..ShopName = 10x016F721F  5b 73 68 6f 70 5d 0d 0a 63 6f 64 65 20 3d 20 31  [shop]..code = 1
0x016F722F  0d 0a 53 68 6f 70 4e 61 6d 65 20 3d 20 31 37 30  ..ShopName = 170我想取出0xf位置,
判断它是一位数1还是三位数104,
但是取了好几次都不对。
我是从1个TXT文件中读取的值,开始读取的是104,三位的。但是读到后来就变成1位的了,
因为它的值读取错误影响到我后面取的值,怎么办呢。[shop]
code = 1[shop]
code = 101

解决方案 »

  1.   

    打开TXT文件,逐行读,每行搜索“code =”(posAt=strstr(oneLine,“code =”);如果找到(posAt !=0),把后面的数变为值(int value=atoi(posAt);)
      

  2.   

                    splFile.Open(szCurPath,CFile::modeRead);
    ULONGLONG nLen = splFile.GetLength();
    char *buff = new char[nLen+1];
    splFile.Read(buff,nLen);
    splFile.Close();   
                    DWORD itemNo,helpItemNo;
    int stLen = 0;
    BYTE *newBuffer;
    char seps[] = "[";
    char *token = _tcstok(buff,seps);
    char itemName[0x30] = {0};
    char itemhelpNo[0x10] = {0};
    token = _tcstok(NULL, seps);
    token = _tcstok(NULL, seps);
    while(token != NULL)
    {
    token = ((char*)token-1);
    *(PBYTE)(token) = '[';
    stLen = strlen(token);
    int index = 0;
    memset(itemName,NULL,sizeof(itemName));
    while(*(WORD*)(token+0x1d+index) != 0x0A0d) //这个固定的1D会出问题
    {
    itemName[index] = *(char*)(token+0x1d+index);
    ++index;
    }下面是我需要读取的TXT文本文件
    [shop]
    code = 60
    ShopName = 17138
    ShopCost = 1
    shop_bg = BG_lab.jpg
    boss_shp = 101
    boss_head = 105
    boss_name = 17139
    boss_msg = 17140[shop]
    code = 101
    ShopName = 17141
    ShopCost = 100
    shop_bg = BG_et.jpg
    boss_shp = 101
    boss_head = 104
    boss_name = 17142
    boss_msg = 17143如果CODE得值按照while(*(WORD*)(token+0x1d+index) != 0x0A0d)中固定的0x1d来取的话会出错的,
    所以我想判断一下,如果是不超过三位就取1D的长度,如果是三位的话就去0x1F的长度
      

  3.   

    CStdioFile,CStdioFile::ReadString()一行一行的读啊