我的代码存在一些问题,我不太明白。我读了一个文件(你可以尝试使用任何文件)来获取十六进制值。我试图找到某些十六进制值并改变它们 - 它的工作类型,但它应该比它应该更晚。例如:
0xAA 0xAB 0xAC 0xAD 0XAE ... 0XCD 0xCE
我想改变0xAB,但我的代码改变了0XCD。不知道为什么会这样,但也许我做错了。还有办法自动获取文件长度吗?我只是放了一个缓冲区,它是文件的一部分,但我希望得到真正的长度。
#include <stdio.h>
#include <string.h>
#define FLEN 512
int convert_to_hex(char c);
int main(int argc, char *argv[]) {
char c;
int i = 0;
FILE *fp = fopen(argv[1],"rb");
for(i = 0; i < FLEN; i++) {
c = convert_to_hex(fgetc(fp));
printf("%02x ", c);
}
printf("\n");
}
int convert_to_hex(char c)
{
char hexVal[3];
sprintf(hexVal, "%02X", 0x69);
if(strncmp(&c, hexVal, 2) == 1) {
printf(">> %s ", hexVal); // indicate where it change (late)
return c + 1;
}
return c;
}
答案 0 :(得分:1)
这是一个错误。
if(strncmp(&c, hexVal, 2) == 1) {
strncmp()
的第一个参数应该是以NULL结尾的字符串。但是,您传递的是指向单个字符的指针。我不明白你的convert_to_hex()
功能正在尝试完成什么,否则我可以提出另一种选择。
要确定文件长度,只需检查fgetc()
的返回值是否为EOF
。 EOF
是一个特殊值,表示您在文件的末尾。
int c = fgetc(fp); // declare an int to hold the return value from fgetc()
int fileLength = 0; // keep track of the file length
while(c != EOF) { // repeat while we're not at the end of the file
c = convert_to_hex(c);
printf("%02x ", c);
c = fgetc(fp); // get the next character
fileLength++; // increment fileLength for each character of the file.
}
// we're done! - fileLength now holds the length of the file
答案 1 :(得分:1)
事实证明答案非常简单,将我的convert_hex更改为:
int convert_to_hex(char c)
{
if (c == 0x69) {
c = c + 1;
}
return c;
}
this answer是为我解决的问题。还要感谢其他人。