pixel_data是vector的char.
当我这样做时,printf(" 0x%1x ", pixel_data[0] )我期待着看到0xf5.
但我觉得0xfffffff5我打印出一个4字节的整数而不是1字节.
为什么是这样?我给printf了一个char打印输出 - 它只有1个字节,为什么printf打印4?
NB.在printf实现包裹第三方API内,但只是想知道,这是标准的功能printf?
#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的字节,因为(11111111111111111111111111001101) = 4294967245.
以下是我的摘录:
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?
考虑以下程序,
#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无符号的类型?