相关疑难解决方法(0)

这是一种将long转换为二进制(char*)表示的惯用C方法吗?

问题在于我猜的标题.

这是我提出的临时解决方案,但我想知道:

  • 如果将二进制表示为char*则存在缺点.有没有更好的方法(考虑到我想要比特移位等...)
  • 如果下面的代码中存在明显的非惯用C(或其他错误).

欢迎所有建议......

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

/* compile with 
    gcc -lm -std=c99 
*/

void binary_repr(unsigned long input) {
    int needed_digits = (int) (floor(log2(input)) + 1);
    char *ptr_binarray = malloc((needed_digits + 1) * sizeof (char));
    int idx = (needed_digits);

    if (ptr_binarray == NULL) {
            printf("Unable to allocate memory.");
        exit(1);
    } 
    else {
        do {
            idx--;
            if (input % 2 == 0) { 
                ptr_binarray[idx] = '0'; 
            } 
            else { 
                ptr_binarray[idx] = '1'; 
            }
            input = input / …
Run Code Online (Sandbox Code Playgroud)

c binary type-conversion

2
推荐指数
1
解决办法
809
查看次数

C中二进制文件的格式说明符是什么?

我到处都看了一下,但是没有找到问题的答案。首先,我知道十进制%d的符号是%o,八进制的符号是,十六进制的符号是%x。但是,我找不到二进制的符号。我将不胜感激任何帮助。

c binary symbols

2
推荐指数
1
解决办法
9362
查看次数

如何在C中打印二进制数据?

我对 C 比较陌生。我有一个要打印到标准输出的二进制缓冲区,如下所示:

unsigned char buffer[1024];
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 printf 将其输出到 stdout?我查看了 printf 的手册页,但是没有提到 an unsigned char*,只有const char*for %s

我想我可以遍历缓冲区并执行putchar(buffer[i]),但是我认为这效率很低。有没有办法使用 printf 做到这一点?我应该改用类似的东西fwrite,那会更合适吗?

谢谢。

编辑:抱歉造成混乱,我不想将任何内容转换为十六进制/二进制表示法,只需按原样写出缓冲区即可。例如,如果我[0x41 0x42 0x42 0x41]在缓冲区中,那么我想打印“ABBA”。

c io printf

1
推荐指数
1
解决办法
9115
查看次数

为什么这段代码会在结果中生成所有1而不是0和1的混合?

我创建了一个64*64大小的hadamard字符矩阵,现在想将矩阵每行的二进制值(即64位二进制数)传递给数组(查找).执行此操作的代码是main函数底部的double for循环.

当我执行一个列表时,使用这里的代码打印,而不是完整的二进制值.

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

void create_hadamard_matrix(char** h, int N)
{
    int ind,indr,indc;

    for (ind=1;ind<=N;ind*=2)
    {

        // find the half length of H matrix for this iteration
        int sideHalf=ind/2;

        //for n=1 H matrix
        if (ind==1)
        {
            h[0][0]='1';
        }
        else
        {
            //put in values in bottom left of new H matrix
            for (indr=0; indr<sideHalf; indr++)
            {
                for (indc=0; indc<sideHalf; indc++)
                {
                    h[indr+sideHalf][indc]=h[indr][indc];
                }
            }
            //put in values in top right of new H matrix
            for (indr=0; indr<sideHalf; indr++)
            { …
Run Code Online (Sandbox Code Playgroud)

c

0
推荐指数
1
解决办法
180
查看次数

C++ 中的 XOR 运算符和 char

给出以下 C++ 代码片段:

char a = 0x0a;
char b = 0x80;
char c = a ^ b;
Run Code Online (Sandbox Code Playgroud)

屏幕后面会发生什么?当我用cout输出c时,没有输出。char a 和 char b 会转换为二进制格式吗?c的格式是什么?

c++

0
推荐指数
1
解决办法
5221
查看次数

二进制何时“变成”十进制或十六进制?十六进制比十进制“快”吗?

人们可以快速学习以下形式的命令,例如 C 语言中的命令

printf("%d", x);
Run Code Online (Sandbox Code Playgroud)

或者

printf("%lu", x);
Run Code Online (Sandbox Code Playgroud)

但是对于x的二进制表示形式,不存在%lu%d的类似物。

我的问题首先是为什么会这样,其次是在什么时候(在哪个抽象级别)二进制表示形式会转变为十进制或十六进制?

Stack 网络上的类似点似乎只能引出特定于语言的答案或实现/库建议。然而,我的问题是关于我对数据如何抽象的整体理解,以及操作系统是否见过二进制文件,或者是否有比操作系统更低级别的东西覆盖它。

为了进一步强调我的方向,考虑一个切题的问题:以十六进制编程源文件比以十进制编程(例如在常量或变量初始化期间)对性能(速度或存储)有任何好处吗?

c binary cpu-architecture low-level number-formatting

-2
推荐指数
1
解决办法
2359
查看次数

C++不输出...... +1否定

如何制作输出NOT(x)的程序?

例:

  • 12至3
  • 0到1
  • 2比1

解释:

  • 1100至0011
  • 0到1
  • 01至10

    printf("%i\n%i\n%i\n", ~12, ~0, ~2);

打印:

-13
-1
-3

printf("%i\n%i\n%i\n", !12, !0, !2);
Run Code Online (Sandbox Code Playgroud)

打印:

0
1
0
Run Code Online (Sandbox Code Playgroud)

c++

-4
推荐指数
1
解决办法
133
查看次数