才给了100分问读文件的有关问题,又来有关问题了,还是读文件的,大家帮忙看看,分就是拿来给的
才给了100分问读文件的问题,又来问题了,还是读文件的,大家帮忙看看,分就是拿来给的
问题很简单,就是从一个特定格式的文件中读出特定信息:
北京|编码|编码 北京 //此处不换行
|196244|24DF7:68270DAE|36D5B:92BCA09|96D6D:1DC0F47E|A89F6:CAA596D4|A9F54:79C5BF13|22F5E:2B1E05FE //此处才换行
就是这样的信息,整个是一行,到最后才换行(2B1E05FE 的时候),现在想把196244后面的每个竖线之间的数字读出来,而且转换成10进制,每个竖线间一组,放进两个int型中,希望能给出源码,50分做个引子,够详细的加分!
在线等
------解决方案--------------------
先写个16进制字符串转整形的,顺问楼主,冒号前后都是要读的么?保证都在unsigned int (16bit)范围内吗? 太大可能要用__int64(long long)哦~
#include <stdio.h>
#include <stdlib.h>
// ============================================================================
// ==============================================================================
unsigned HexToDec(const char *szStr)
{
//~~~~~~~~~~~~~~
unsigned i, n = 0;
//~~~~~~~~~~~~~~
for (i = 0; szStr[i]; i++) {
n *= 16;
if (szStr[i] > = '0 ' && szStr[i] <= '9 ') {
n += szStr[i] - 48;
} else if (szStr[i] > = 'A ' && szStr[i] <= 'F ') {
n += szStr[i] - 'A ' + 10;
} else if (szStr[i] > = 'a ' && szStr[i] <= 'f ') {
n += szStr[i] - 'a ' + 10;
}
}
return n;
}
// ============================================================================
// ==============================================================================
int main()
{
//~~~~~~~~~~~~~~~~~~~~~
char test[] = "24DF7 ";
//~~~~~~~~~~~~~~~~~~~~~
printf( "%u\n ", HexToDec(test));
return 0;
}
------解决方案--------------------
#include <cstring>
#include <fstream>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
/*读取文件内容*/
string line;
ifstream fin( "test.txt ");
getline(fin, line);
/*转换到 char * 进行操作*/
char *tmp, *p;
tmp=new char[line.length()+1];
strcpy(tmp, line.c_str());
int i, num[12];
p = strstr(tmp, "|196244| ");
p += strlen( "|196244| ")-1; //寻找指定位置
puts(p); //输出查看
for(i=0; i <12; i+=2)
sscanf(p, "|%x:%x ", &num[i], &num[i+1]); //数据转换, 注意数据进制,%x
for(i=0; i <12; i++)
printf( "%d ~ %x\n ", num[i], num[i]); //完成,输出查看
system( "pause ");
return 0;
}
问题很简单,就是从一个特定格式的文件中读出特定信息:
北京|编码|编码 北京 //此处不换行
|196244|24DF7:68270DAE|36D5B:92BCA09|96D6D:1DC0F47E|A89F6:CAA596D4|A9F54:79C5BF13|22F5E:2B1E05FE //此处才换行
就是这样的信息,整个是一行,到最后才换行(2B1E05FE 的时候),现在想把196244后面的每个竖线之间的数字读出来,而且转换成10进制,每个竖线间一组,放进两个int型中,希望能给出源码,50分做个引子,够详细的加分!
在线等
------解决方案--------------------
先写个16进制字符串转整形的,顺问楼主,冒号前后都是要读的么?保证都在unsigned int (16bit)范围内吗? 太大可能要用__int64(long long)哦~
#include <stdio.h>
#include <stdlib.h>
// ============================================================================
// ==============================================================================
unsigned HexToDec(const char *szStr)
{
//~~~~~~~~~~~~~~
unsigned i, n = 0;
//~~~~~~~~~~~~~~
for (i = 0; szStr[i]; i++) {
n *= 16;
if (szStr[i] > = '0 ' && szStr[i] <= '9 ') {
n += szStr[i] - 48;
} else if (szStr[i] > = 'A ' && szStr[i] <= 'F ') {
n += szStr[i] - 'A ' + 10;
} else if (szStr[i] > = 'a ' && szStr[i] <= 'f ') {
n += szStr[i] - 'a ' + 10;
}
}
return n;
}
// ============================================================================
// ==============================================================================
int main()
{
//~~~~~~~~~~~~~~~~~~~~~
char test[] = "24DF7 ";
//~~~~~~~~~~~~~~~~~~~~~
printf( "%u\n ", HexToDec(test));
return 0;
}
------解决方案--------------------
#include <cstring>
#include <fstream>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
/*读取文件内容*/
string line;
ifstream fin( "test.txt ");
getline(fin, line);
/*转换到 char * 进行操作*/
char *tmp, *p;
tmp=new char[line.length()+1];
strcpy(tmp, line.c_str());
int i, num[12];
p = strstr(tmp, "|196244| ");
p += strlen( "|196244| ")-1; //寻找指定位置
puts(p); //输出查看
for(i=0; i <12; i+=2)
sscanf(p, "|%x:%x ", &num[i], &num[i+1]); //数据转换, 注意数据进制,%x
for(i=0; i <12; i++)
printf( "%d ~ %x\n ", num[i], num[i]); //完成,输出查看
system( "pause ");
return 0;
}