我有以下代码将 16位整数的流数据转换为无符号8位整数。
我希望将它们转换为字母数据值并查看它们包含的内容。
#include<stdio.h>
int main() {
FILE *fp,*out;
char buffer[256];
size_t i = 0;
fp=fopen("c:/Gosam/input.txt", "rb");
if(fp != NULL) {
fread(buffer, sizeof buffer,1, fp);
}
out = fopen("c:/Gosam/res.txt", "w");
if(out != NULL) {
// buffer = (char*) malloc (sizeof(char)*Size);
for( i = 0; i < sizeof(buffer); i += 2)
{
const unsigned int var = buffer[i] + 256 * buffer[i + 1];
fprintf(out, "%u\n", var);
}
fclose(out);
}
fclose(fp);
}
以下是我的输出形式:
263 4294966987 4294967222 4294967032 64 4294967013 73 4294967004 90
4294967028 83 4294966975 37 4294966961 5 4294966976 82 4294966942
4294967022 4294966994 11 4294967024 29 4294966985 4294966986 4294966954 50
4294966993 4294966974 4294967019 4294967007
这是我想要转换为字母字符并查看其内容的值。
答案 0 :(得分:1)
我不知道你期望什么作为答案(你没有提出问题),但你的代码中似乎有一个可疑的东西:
char buffer[256];
此处char
表示signed char
。如果你的代码对它们进行了操作(比如乘以256),它可能不会达到预期的效果(虽然我只能猜测你的期望 - 你的问题没有提到它)。
尝试以下方法:
unsigned char buffer[256];
另外请问一个问题(即带问号的东西),并提供一些例子(输入,输出)。
答案 1 :(得分:0)
你的基本错误是:
我已修复它们并评论受影响的线条是否合适。我还将缓冲区更改为使用dynamic memory allocation而不是静态分配(这就是如何为编译时未知大小的缓冲区分配内存)。请尝试以下代码,该代码会将所有ASCII字符从一个文件复制到您的输出文件(这可能就是“字母字符串”的含义):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
FILE *fp, *out;
char *buffer = NULL; /* use a pointer for dynamic memory allocation */
size_t i = 0, charCount = 0;
fp = fopen("c:/input.txt", "r"); /*read as ascii - not binary */
if(fp != NULL){ /*use 'fp' here 'out' is not initalized */
fseek(fp, 0, SEEK_END); /* go to end of the file */
charCount = ftell(fp) - 1; /* get position */
fseek(fp, 0, SEEK_SET); /* return to the beginning of the file */
buffer = (char*)malloc(sizeof(char)*charCount); /* allocate memory */
fread(buffer, sizeof(char) * charCount, 1, fp); /* reads all characters from the file */
}
out = fopen("c:/output.txt", "w");
if(out != NULL){
for(i = 0; i < charCount; i += 1){ /* loop from 0 to count of characters */
const unsigned char var = buffer[i];
fprintf(out, "%c", var);
}
fclose(out);
}
fclose(fp);
if(buffer != NULL){
free(buffer); /* deallocate memory */
}
return 0;
}