简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解字符串"00000001"和"\x00\x00\x00\x01"十六进制用法区别。
char str_buf[] = "00000001";
和char hex_buf[] = "\x00\x00\x00\x01";
的区别如下
-
内容表示方式不同:
char str_buf[] = "00000001";
:这是一个包含字符序列的字符串,每个字符都是ASCII码表示的数字字符。这个字符串表示十进制数1。char hex_buf[] = "\x00\x00\x00\x01";
:这是一个包含字符序列的字符串,每个字符是一个以\x
开头的转义序列,表示一个十六进制数。这个字符串表示十六进制数0x00000001。
-
字符长度不同:
char str_buf[] = "00000001";
定义的字符串含有8个字符(包括结束符\0
),对应于8个字节的存储空间。char hex_buf[] = "\x00\x00\x00\x01";
定义的字符串含有4个字符(包括结束符\0
),对应于4个字节的存储空间。
-
数据类型不同:
str_buf
被定义为字符数组,每个元素都是一个字符。hex_buf
也被定义为字符数组,每个元素同样是一个字符,但是通过使用转义序列\x
来表示十六进制数。
2.应用实例
#include <stdio.h>
#include <cstring>
void print_str2hex(unsigned char *name, unsigned char* str, size_t size){
printf("%s: ",name);
for (size_t i = 0; i < size; i++) {
printf("%02x ", static_cast<unsigned char>(str[i]));
if(i != 0 && i % 16 == 0)
printf("\n");
}
printf("\n");
}
int main(){
char str_buf[] = "00000001";
char hex_buf[] = "\x00\x00\x00\x01";//\x:表示16进制,
//1.16进制操作
printf("sizeof(hex_buf) = %ld\n",sizeof(hex_buf));//sizeof最后一位是'\0',即0,即实际长度+1位.
printf("strlen(hex_buf) = %ld\n",strlen(hex_buf));//strlen遇到0即截止.
printf("xxx-------> hex_buf = %s\n",hex_buf); //表示的16进制
printf("xxx-------> str_buf = %s\n",str_buf);//表示的字符串
print_str2hex((unsigned char *)"hex data", (unsigned char *)hex_buf, sizeof(hex_buf)-1);
print_str2hex((unsigned char *)"str data", (unsigned char *)str_buf, sizeof(str_buf)-1);
}
打印
sizeof(hex_buf) = 5
strlen(hex_buf) = 0
xxx-------> hex_buf =
xxx-------> str_buf = 00000001
hex data: 00 00 00 01
str data: 30 30 30 30 30 30 30 31