【发布时间】:2015-07-23 22:43:10
【问题描述】:
我有一个包含十六进制代码的file
01F640
01E120
04EF20
000000
我想将每 6 位添加到一个数组中。该数组将它们存储为整数,以便程序的其余部分可以评估它们。 Here is the code I have so far.
int main(int argc, const char *argv[]){
if(argc < 1){
printf("You need to specify a file!");
exit(EXIT_FAILURE);
}
char ch;
char chars[6];
int charCount = 0;
FILE *f;
f = fopen(argv[1], "r");
int i = 0, j = 0;
while((ch = fgetc(f)) != EOF){
if(ch == '\n') continue;
printf("r%X", ch);
printf("\n");
chars[i] = (char)ch;
i++;
if(i <= 6){
i = 0;
int hex[6];
int m;
for(m = 0; m < 6; m++){
printf("\ns%X", chars[m]);
char buffer[1];
buffer[0] = chars[m];
hex[m] = (int) strtol(buffer, NULL, 16);
}
unsigned int k = (hex[0]<<40)|(hex[1]<<32)|(hex[2]<<24)|(hex[3]<<16)|(hex[4]<<8)|hex[5];
prog[j++] = k;
memset(&chars[0], 0, sizeof(chars));
}
}
int l;
for(l = 0; l < PROG_LENGTH; l++){
printf("p%X", prog[l]);
if(prog[l] == 0) break;
}
}
我要做的是读取每个字符并将其添加到字符数组中。一旦该数组达到 6,从这些位中创建一个 int 并重置数组。
【问题讨论】:
-
您应该直接在问题中编辑您的代码和任何其他文档,例如您的输入示例。外部链接坏了。您还应该解释您的代码遇到的具体问题。您的描述说明了您正在尝试做什么,但没有说明什么不起作用。
-
@RetiredNinja 刚刚添加了外部代码,我不知道它出了什么问题! :P 我会尝试更多的调试,看看出了什么问题。
-
六个十六进制数字大于六位。它是三个字节。
-
您为什么不直接读取整行并使用strtol 将其转换为整数?理想情况下,您的示例中应该包含一些十六进制字符,以清楚地表明它们不仅仅是 6 位基数为 10 的整数。
-
@EOF 我的意思是十六进制数字的六个“数字”。我找不到它的好名字。