在C中将二进制文件转换为char

哈维姆特

我一直在尝试将二进制数转换为char,我使用以下代码将char转换为二进制:

void bin(char x){
    int y;
    for(y = 0; y < sizeof(char) * 8; y++){
    fprintf(f2,"%c", ( x & (1 << y) ) ? '1' : '0' );
}}

而且效果很好。

问题是我不知道如何撤消它,我想获得这个二进制数并将其转换为初始字符。我使用的是愚蠢的代码,但它产生了一个核心问题。

char subbuff[9];
memcpy( subbuff, &fichero[0], 8 );
subbuff[8] = '\0';


for(int k=8;k<fichero_len;k+=8){        

    char c = strtol(subbuff, 0, 2);
    printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c);
    memcpy( subbuff, &fichero[k], k+8 );
    subbuff[8] = '\0';  

}

例如,如果我转换字符串“ hola”,则第一个代码显示为“ 00010110111101100011011010000110”

但是如果我把它放在第二个代码中:

const char *hola="00010110111101100011011010000110";
char subbuff[16];
memcpy( subbuff, hola[0], 8 );
subbuff[8] = '\0';


for(int k=8;k<strlen(hola);k+=8){   
    char c = strtol(subbuff, 0, 2);
    printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c);
    memcpy( subbuff, &hola[k], k+8 );
    subbuff[8] = '\0';  

}

它产生一个核心问题

风向标

编辑1:

一个问题是,你正在复制字节太多成subbuff

memcpy( subbuff, &fichero[k], k+8 );

另一个原因是,你传递一个坏的指针memcpy

memcpy( subbuff, hola[0], 8 );

这将导致段错误。请启用编译器警告。

甚至不需要在循环外部执行此操作。可以像这样完成

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
    const char *hola = "01101000011011110110110001100001";
    char subbuff[9];
    char result [256] = "";
    unsigned char c;
    int k;
    int index = 0;
    int fichero_len = (int)strlen(hola);

    for(k = 0; k < fichero_len; k += 8) {    
        memcpy(subbuff, &hola[k], 8);                   // <--- copy 8 butes only
        subbuff[8] = '\0';  
        c = (unsigned char)strtol(subbuff, 0, 2);
        printf("%s = %c = %d = 0x%.2X\n", subbuff, c, c, c);
        result[index++] = c;
        result[index] = '\0';
    }
    printf("Result = %s\n", result);
    return 0;
}

最终,您的位序列被颠倒了,因此您将不会获得char最初的支持!

编辑2:在上述代码中添加几行并反转hola定义中的位后,得到此输出。显然,您必须确保该result[]时间足够长。

程序输出:

01101000 = h = 104 = 0x68
01101111 = o = 111 = 0x6F
01101100 = l = 108 = 0x6C
01100001 = a = 97 = 0x61
Result = hola

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中将文件转换为二进制

来自分类Dev

在C#中将文件转换为二进制

来自分类Dev

在Python中将文件转换为二进制代码

来自分类Dev

在C ++中将二进制文件读入char数组

来自分类Dev

在C中将二进制文件转换为文本文件

来自分类Dev

在C中将二进制文件转换为文本文件

来自分类Dev

在C ++中从二进制文件读取时将char *转换为double?

来自分类Dev

转换为二进制文件

来自分类Dev

如何使用堆栈在C编程中将十进制转换为二进制

来自分类Dev

如何在C++中将二进制编码的十进制转换为int

来自分类Dev

如何在Ruby中将txt文件转换为二进制文件

来自分类Dev

在MATLAB中将表转换为二进制矩阵

来自分类Dev

在节点中将UUID转换为二进制

来自分类Dev

在R中将因子转换为二进制

来自分类Dev

在Java中将double转换为二进制

来自分类Dev

在Java中将文本转换为二进制

来自分类Dev

将二进制数组转换为Char Java

来自分类Dev

在python中将二进制文件转换为utf-8

来自分类Dev

在Google App Engine中将二进制文件转换为PIL图像数据类型

来自分类Dev

在Perl中将大文件转换为二进制代码

来自分类Dev

如何在python中将float('nan')转换为二进制文件?

来自分类Dev

如何在Python中将mongodb文档转换为二进制文件?

来自分类Dev

在python中将整数转换为大端字节二进制文件

来自分类Dev

直接在python中将二进制文件转换为整数数组?

来自分类Dev

将二进制字符串(ASCII)转换为二进制文件

来自分类Dev

在C中将(un)sorted数组转换为二进制搜索树

来自分类Dev

在C中将二进制字符串转换为int

来自分类Dev

如何在目标C中将PDF转换为二进制

来自分类Dev

在 C++ 中将二进制转换为整数返回奇怪的结果

Related 相关文章

  1. 1

    在C#中将文件转换为二进制

  2. 2

    在C#中将文件转换为二进制

  3. 3

    在Python中将文件转换为二进制代码

  4. 4

    在C ++中将二进制文件读入char数组

  5. 5

    在C中将二进制文件转换为文本文件

  6. 6

    在C中将二进制文件转换为文本文件

  7. 7

    在C ++中从二进制文件读取时将char *转换为double?

  8. 8

    转换为二进制文件

  9. 9

    如何使用堆栈在C编程中将十进制转换为二进制

  10. 10

    如何在C++中将二进制编码的十进制转换为int

  11. 11

    如何在Ruby中将txt文件转换为二进制文件

  12. 12

    在MATLAB中将表转换为二进制矩阵

  13. 13

    在节点中将UUID转换为二进制

  14. 14

    在R中将因子转换为二进制

  15. 15

    在Java中将double转换为二进制

  16. 16

    在Java中将文本转换为二进制

  17. 17

    将二进制数组转换为Char Java

  18. 18

    在python中将二进制文件转换为utf-8

  19. 19

    在Google App Engine中将二进制文件转换为PIL图像数据类型

  20. 20

    在Perl中将大文件转换为二进制代码

  21. 21

    如何在python中将float('nan')转换为二进制文件?

  22. 22

    如何在Python中将mongodb文档转换为二进制文件?

  23. 23

    在python中将整数转换为大端字节二进制文件

  24. 24

    直接在python中将二进制文件转换为整数数组?

  25. 25

    将二进制字符串(ASCII)转换为二进制文件

  26. 26

    在C中将(un)sorted数组转换为二进制搜索树

  27. 27

    在C中将二进制字符串转换为int

  28. 28

    如何在目标C中将PDF转换为二进制

  29. 29

    在 C++ 中将二进制转换为整数返回奇怪的结果

热门标签

归档