001_printf

掌握C/C++:printf函数详解与常用输出控制符

printf(“输出控制符”,输出参数)

#include <stdio.h>
int main(void){
	int i =10;
	printf("%d\n",i);
	return 0;
}

常用的输出控制符

  1. %d:按十进制整型数据的实际长度输出。
  2. %ld:输出长整型数据。
  3. %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
  4. %u:输出无符号整型(unsigned)。输出无符号整型时也可以用%d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使CPU多做一次无用功。
  5. %c:用来输出一个字符。
  6. %f:用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出6位,超过6位的四舍五入。
  7. %.mf:输出实数时小数点后保留m位,注意m前面有个点。
  8. %o:以八进制整数形式输出。
  9. %s:用来输出字符串。用%s输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串。
  10. %x(或%X或%#x或%#X):以十六进制形式输出整数。
    区别如下:
    在这里插入图片描述

转义

在这里插入图片描述

#include "Ap4Mpeg2Parser.h" #include "Ap4Utils.h" /*---------------------------------------------------------------------- | debugging +---------------------------------------------------------------------*/ //#define AP4_MPEG2_PARSER_ENABLE_DEBUG #if defined(AP4_MPEG2_PARSER_ENABLE_DEBUG) #define DBG_PRINTF_0(_x0) printf(_x0) #define DBG_PRINTF_1(_x0, _x1) printf(_x0, _x1) #define DBG_PRINTF_2(_x0, _x1, _x2) printf(_x0, _x1, _x2) #define DBG_PRINTF_3(_x0, _x1, _x2, _x3) printf(_x0, _x1, _x2, _x3) #define DBG_PRINTF_4(_x0, _x1, _x2, _x3, _x4) printf(_x0, _x1, _x2, _x3, _x4) #define DBG_PRINTF_5(_x0, _x1, _x2, _x3, _x4, _x5) printf(_x0, _x1, _x2, _x3, _x4, _x5) #define DBG_PRINTF_6(_x0, _x1, _x2, _x3, _x4, _x5, _x6) printf(_x0, _x1, _x2, _x3, _x4, _x5, _x6) #define DBG_PRINTF_7(_x0, _x1, _x2, _x3, _x4, _x5, _x6, _x7) printf(_x0, _x1, _x2, _x3, _x4, _x5, _x6, _x7) #else #define DBG_PRINTF_0(_x0) #define DBG_PRINTF_1(_x0, _x1) #define DBG_PRINTF_2(_x0, _x1, _x2) #define DBG_PRINTF_3(_x0, _x1, _x2, _x3) #define DBG_PRINTF_4(_x0, _x1, _x2, _x3, _x4) #define DBG_PRINTF_5(_x0, _x1, _x2, _x3, _x4, _x5) #define DBG_PRINTF_6(_x0, _x1, _x2, _x3, _x4, _x5, _x6) #define DBG_PRINTF_7(_x0, _x1, _x2, _x3, _x4, _x5, _x6, _x7) #endif #define AP4_MPEG2_PARSER_ENABLE_ERROR_LOG #if defined(AP4_MPEG2_PARSER_ENABLE_ERROR_LOG) #define ERROR_LOG(args...) \ do {\ fprintf(stderr, "\033[1;31m<ERROR! %s:%d, %s>: ", __FILE__, __LINE__, __FUNCTION__);\ fprintf(stderr, args);\ fprintf(stderr,"\033[0m");\ } while(0) #else #define ERROR_LOG(args...) #endif /*---------------------------------------------------------------------- | AP4_Mpeg2FrameParser::AP4_Mpeg2FrameParser +---------------------------------------------------------------------*/ AP4_Mpeg2FrameParser::AP4_Mpeg2FrameParser() : m_AccessUnitVclNalUnitCount(0), m_TotalNalUnitCount(0), m_TotalAccessUnitCount(0) { for (unsigned int i = 0; i < 2; i++) { m_AccessUnitData[i].SetAlignUpSize(0x10000); m_AccessUnitData[i].Reserve(0x40000); } m_ActiveAccessUnitIndex = 0; m_LastIframeTotalAUCount = 0; } /*---------------------------------------------------------------------- | AP4_Mpeg2FrameParser::~AP4_Mpeg2FrameParser +---------------------------------------------------------------------*/ AP4_Mpeg2FrameParser::~AP4_Mpeg2FrameParser() { } /*---------------------------------------------------------------------- | AP4_Mpeg2FrameParser::Reset +---------------------------------------------------------------------*/ void AP4_Mpeg2FrameParser::Reset(void) { m_AccessUnitVclNalUnitCount = 0; m_TotalNalUnitCount = 0; m_TotalAccessUnitCount = 0; m_ActiveAccessUnitIndex = 0; m_LastIframeTotalAUCount = 0; for (unsigned int i = 0; i < 2; i++) { m_AccessUnitData[i].SetDataSize(0); } m_NalParser.Reset(); } /*---------------------------------------------------------------------- | AP4_Mpeg2SequenceHeader::AP4_Mpeg2SequenceHeader +---------------------------------------------------------------------*/ AP4_Mpeg2SequenceHeader::AP4_Mpeg2SequenceHeader() : horizontal_size_value(720), vertical_size_value(480), aspect_ratio_information(0), frame_rate_code(4), bit_rate_value(0), marker_bit(0), vbv_buffer_size_value(0), constrained_parameters_flag(0), load_intra_quantiser_matrix(0), load_non_intra_quantiser_matrix(0) { } /*---------------------------------------------------------------------- | AP4_Mpeg2SequenceHeader::GetInfo +---------------------------------------------------------------------*/ void AP4_Mpeg2SequenceHeader::GetInfo(unsigned int& width, unsigned int& height, float& fps) { static float const frameRateFromCode[] = { 0.0f, // forbidden 24000 / 1001.0f, // approx 23.976 24.0f, 25.0f, 30000 / 1001.0f, // approx 29.97 30.0f, 50.0f, 60000 / 1001.0f, // approx 59.94 60.0f, 0.0f, // reserved 0.0f, // reserved 0.0f, // reserved 0.0f, // reserved 0.0f, // reserved 0.0f, // reserved 0.0f // reserved }; width = horizontal_size_value; height = vertical_size_value; fps = frameRateFromCode[frame_rate_code]; } /*---------------------------------------------------------------------- | AP4_Mpeg2FrameParser::ParseSequenceHeader +---------------------------------------------------------------------*/ AP4_Result AP4_Mpeg2FrameParser::ParseSequenceHeader(const unsigned char* data, unsigned int data_size, AP4_Mpeg2SequenceHeader& sh) { sh.raw_bytes.SetData(data, data_size); AP4_BitReader bits(data, data_size); bits.SkipBits(8); // NAL Unit Type sh.horizontal_size_value = bits.ReadBits(12); sh.vertical_size_value = bits.ReadBits(12); sh.aspect_ratio_information = bits.ReadBits(4); sh.frame_rate_code = bits.ReadBits(4); sh.bit_rate_value = bits.ReadBits(18); sh.marker_bit = bits.ReadBit(); sh.vbv_buffer_size_value = bits.ReadBits(10); sh.constrained_parameters_flag = bits.ReadBit(); sh.load_intra_quantiser_matrix = bits.ReadBit(); sh.load_non_intra_quantiser_matrix = bits.ReadBit(); return AP4_SUCCESS; } 详细注释上述代码
最新发布
09-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值