将unsigned int转换为char字母

时间:2014-06-03 09:21:57

标签: c

我有以下代码将 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

这是我想要转换为字母字符并查看其内容的值。

2 个答案:

答案 0 :(得分:1)

我不知道你期望什么作为答案(你没有提出问题),但你的代码中似乎有一个可疑的东西:

char buffer[256];

此处char表示signed char。如果你的代码对它们进行了操作(比如乘以256),它可能不会达到预期的效果(虽然我只能猜测你的期望 - 你的问题没有提到它)。

尝试以下方法:

unsigned char buffer[256];

另外请问一个问题(即带问号的东西),并提供一些例子(输入,输出)。

答案 1 :(得分:0)

你的基本错误是:

  • 打开输入文件后检查out而不是fp对NULL

  • fread直到eof不会返回可以读取的字符数(我为此目的使用了fseekftell

  • 将uint值而不是char值写入文件

我已修复它们并评论受影响的线条是否合适。我还将缓冲区更改为使用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;
}