相关疑难解决方法(0)

为什么printf在打印hex时只打印出一个字节?

pixel_datavectorchar.

当我这样做时,printf(" 0x%1x ", pixel_data[0] )我期待着看到0xf5.

但我觉得0xfffffff5我打印出一个4字节的整数而不是1字节.

为什么是这样?我给printf了一个char打印输出 - 它只有1个字节,为什么printf打印4?

NB.在printf实现包裹第三方API内,但只是想知道,这是标准的功能printf

c c++ printf

34
推荐指数
3
解决办法
4万
查看次数

使用%u读取签名的字符

#include <stdio.h>

int main() {
    int i,n;
    int a = 123456789;

    void *v = &a;

    unsigned char *c = (unsigned char*)v;

    for(i=0;i< sizeof a;i++) {
        printf("%u  ",*(c+i));
    }

    char *cc = (char*)v;
    printf("\n %d", *(cc+1));

    char *ccc = (char*)v;
    printf("\n %u \n", *(ccc+1));

}
Run Code Online (Sandbox Code Playgroud)

该程序在我的32位Ubuntu机器上生成以下输出.

21  205  91  7  
-51
4294967245
Run Code Online (Sandbox Code Playgroud)

前两行输出我能理解=>

  • 第1行:在内存中存储字节的顺序.
  • 第二行:第二个字节值的有符号值(2的补码).
  • 第3行:为什么这么大的价值?

请解释最后一行输出.为什么添加三个1的字节,因为(11111111111111111111111111001101) = 4294967245.

c c++ pointers char pointer-arithmetic

8
推荐指数
2
解决办法
591
查看次数

打印出值uint8_t *

以下是我的摘录:

typedef struct{
   uint8_t dstEndpt;
   uint16_t srcEndpt;
   uint8_t * quality;
} DataIndT;

DataIndT * dataIndPtr;

printf("dstEndpt: 0x%02x", dataIndPtr->dstEndpt); <-- print out the value of dstEndpt

printf("dstEndpt: 0x%04x", dataIndPtr->srcEndpt); <-- print out the value of srcEndpt
Run Code Online (Sandbox Code Playgroud)

但是,如何打印出值quality

c

4
推荐指数
2
解决办法
3万
查看次数

printf()函数如何知道其参数的类型

考虑以下程序,

#include <stdio.h>
int main()
{
    char a = 130;
    unsigned char b = 130;

    printf("a = %d\nb = %d\n",a,b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序将显示以下输出。

a = -126
b = 130
Run Code Online (Sandbox Code Playgroud)

我的问题是printf()函数如何知道如上所示的带符号的a类型和b无符号的类型?

c printf gcc

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

标签 统计

c ×4

c++ ×2

printf ×2

char ×1

gcc ×1

pointer-arithmetic ×1

pointers ×1