`
kmplayer
  • 浏览: 512708 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Buffer.c源码学习

阅读更多
长整数装化为16进制的字符串
#include <iostream>
using namespace std;

static const char hex_chars[] = "0123456789abcdef";

string long_to_hex(unsigned long value) 
{
	string str_hex;
	int shift = 0;
	unsigned long copy = value;

	while (copy) 
        {
		copy >>= 4;
		shift++;
	}
	if (shift == 0)
		shift++;
	if (shift & 0x01)
		shift++; //保证shift至少为2
	shift <<= 2;//shift此时变为二进制的bit位数,四的倍数
	while (shift > 0) 
        {
		shift -= 4;//一次循环处理四位
		str_hex += hex_chars[(value >> shift) & 0x0F];
	}
	return str_hex;
}

int main()
{

    cout<<long_to_hex(56);
    return 0;
}


字符串的大小写转换
#include <stdio.h>
#include <stdlib.h>

int to_upper(char *c) 
{

	if (!c) return 0;

	for ( ; *c; c++) 
        {
		if (*c >= 'a' && *c <= 'z') 
                {
			*c &= ~32;
    //A-Z:65-90  a-z:97-122 可见不同在于表示32的那个二进制比特位
    //小变大相当于去掉32那个比特位,可通过&(~32)实现
		}
	}

	return 0;
}

int to_lower(char *c) 
{

	if (!c) return 0;

	for ( ; *c; c++) 
        {
		if (*c >= 'A' && *c <= 'Z') 
                {
			*c |= 32;
		}
	}
    //大变小相当于增加32那个比特位,可通过|32实现

	return 0;
}

int main()
{
    char test[]="hello WORLD!";
    //原因:此时"hello world!"被当做非常量字符串,放在了栈上,允许修改
    //char* test="hello world!"; 为什么这么写会报错?
    //原因:此时"hello world!"被当做常量字符串,放在了静态存储区,不允许修改
    to_upper(test);
    printf("%s\n",test);
    to_lower(test);
    printf("%s\n",test);
    return 0;
}




判定一个字符
#include <stdio.h>
#include <stdlib.h>

//注:参数是字符的ascii值.

//检测给定字符是否为数字字符
int light_isdigit(int c) 
{
	return (c >= '0' && c <= '9');
}

//检测给定字符是否为十六进制数字字符
int light_isxdigit(int c) 
{
	if (light_isdigit(c)) return 1;

	c |= 32; //统一转化为小写
	return (c >= 'a' && c <= 'f');
}

//检测给定字符是否为字母字符
int light_isalpha(int c) 
{
	c |= 32;
	return (c >= 'a' && c <= 'z');
}

//检测给定字符是否为数字字符或字母字符
int light_isalnum(int c) 
{
	return light_isdigit(c) || light_isalpha(c);
}

int main()
{
    printf("%d\n",light_isdigit('8'));
    printf("%d\n",light_isdigit(8));
    printf("%d\n",light_isalpha('a'));
    printf("%d\n",light_isalpha(97));
    return 0;
}
分享到:
评论

相关推荐

    zmodem 源码

    源码学习价值** 通过研究Zmodem的源码,开发者可以了解到如何构建一个高效的串行通信协议,包括如何设计高效的数据包格式,如何处理错误,以及如何实现流式传输。这对于理解网络通信协议和编写自己的文件传输程序...

    环形缓冲区建立源码下载

    Buffer.c 和 Buffer.h 文件很可能是环形缓冲区的C语言实现。在Buffer.h中,可能定义了环形缓冲区的数据结构(如`struct Buffer`),以及相关的操作函数原型,如`init_buffer`用于初始化缓冲区,`write_to_buffer`...

    aplay.tar.gz_alsa arecord源码_aplay 源码_aplay源码_linux alsa 录音_录音

    在`aplay.c`源码中,我们可以看到如何初始化ALSA设备、设置音频参数(如采样率、位深度、通道数等)以及如何处理音频数据流。源码中的关键函数包括`main()`,它是程序的入口点,负责处理命令行参数,以及`snd_pcm_...

    c语言文本编辑器系统源码.zip

    - **C语言**:显然,这是主要的编程语言,源码就是用C编写的。 - **小程序**:这里可能指的是轻量级或简单的应用程序,比如命令行文本编辑器。 - **心梓知识**:这可能是一个个人或组织的品牌或知识分享标签。 ...

    华邦W25系列SPI FLASH读写C语语言动源码(单片机).zip

    华邦W25系列SPI FLASH读写C语语言动源码(单片机),已在STM32单片机调试测试,可以做为你的学习设计参考。 ain.c文件: #include "stm32f10x_it.h" #include"hw_conf.h" #include "spi_flash.h" void delay(int d);...

    c语言UDP传输系统源码.7z

    在C语言源码中,通常会用到`sendto()`和`recvfrom()`函数进行数据的发送和接收。 - 发送:`sendto(sockfd, buffer, buffer_len, 0, (struct sockaddr *)&dest_addr, sizeof(dest_addr));` - 接收:`recvfrom...

    ring_buffer_test_socket_chamberjwf_循环缓冲区_循环缓冲_visualc++_源码

    本项目“ring_buffer_test_socket_chamberjwf_循环缓冲区_循环缓冲_visualc++_源码”旨在通过C语言实现一个循环缓冲区,并结合线程技术,展示如何在不同线程之间安全地进行数据读写操作。下面我们将详细探讨其中涉及...

    librdkafka源码

    9. **缓冲区和数据结构**:`src/buffer.c`、`src/list.c`等文件提供了高效的数据结构和缓冲区管理,优化了数据处理的效率。 通过对librdkafka源码的阅读和分析,我们可以深入了解Kafka客户端的工作原理,包括消息的...

    c语言UDP传输系统源码.zip

    《C语言实现UDP传输系统详解》 ...然而,实际应用中可能需要更复杂的功能,如多线程处理、数据分片重组、流量控制等,这需要进一步学习和实践。记住,理解网络协议和熟练掌握C语言是开发此类系统的基石。

    C语言编的系统时钟小程序源码

    在“C语言编的系统时钟小程序源码”中,`clock.c`文件很可能会包含一个循环,持续更新并打印当前时间。为了实现动态显示,我们可以使用`sleep()`函数,让它在每次更新之间暂停一段时间。这个函数在`&lt;unistd.h&gt;`...

    Node.js v7.0.0源码

    通过深入研究Node.js v7.0.0的源码,我们可以学习到V8引擎的工作原理、Node.js事件驱动模型、模块加载机制、异步编程的最佳实践,以及如何利用新特性来编写更高效、更易于维护的Node.js应用。对于想要成为Node.js...

    C语言编程源码之-文件

    本压缩包文件包含了一些关于C语言文件编程的源码示例,旨在帮助初学者通过实践提升编程能力和解决问题的能力。 首先,我们需要了解C语言中进行文件操作的基本步骤: 1. 打开文件:使用`fopen()`函数打开一个文件。...

    文件显示复制算法文档及C/C++源码

    对于更复杂的文件显示和复制算法,比如多线程、异步I/O或者基于流的复制,你可能需要进一步学习线程同步、异步编程等高级主题。在实际应用中,还可以考虑使用系统级别的API,如POSIX的`read`和`write`或Windows的`...

    Linux多线程服务端编程:使用muduo C++网络库

    4.2C/C++ 系统库的线程安全性. . . . . . . . . . . . . . . . .. . . . . . . . 85 4.3Linux 上的线程标识. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 89 4.4线程的创建与销毁的守则. . . . . . ....

    C语言标准库源代码.zip

    在"标题"中提到的"C语言标准库源代码.zip"压缩包,包含了C语言中一些常用标准库函数的源码,这对于学习C语言的底层工作原理和深入理解编程概念非常有帮助。 "描述"中提到了几个关键的函数:printf、sprintf、scanf...

    GNU Nano 2.5.3 编辑器源码

    主要的源文件可能有“main.c”(主程序入口)、“buffer.c”(缓冲区管理)、“screen.c”(屏幕更新)等。 2. **配置脚本**:如“configure”脚本,用于检查系统环境,配置编译选项,并生成Makefile。用户可以通过...

    串口通讯试验1.0,串口通信实验,C,C++源码.rar

    这个压缩包“串口通讯试验1.0,串口通信实验,C,C++源码.rar”显然是一个用于学习或实践串口通信的资源,包含了C和C++语言的源代码实现。下面我们将详细讨论串口通讯的基本概念、工作原理,以及如何使用C和C++进行串口...

    windows下的udp套接字c源码用例例子

    在Windows环境下,UDP(User Datagram Protocol)套接字是网络编程中的一个重要概念,它主要用于实现无...通过理解这些基础概念和函数,你可以分析并学习这两个源码文件,进一步掌握UDP套接字在Windows下的C语言实现。

    深入理解Node.js:核心思想与源码分析

    最后,Node.js的源码分析和学习,需要一定的C、C++基础。这一点是由于Node.js底层是用C++编写的,了解底层语言对于理解Node.js的工作原理和性能优化至关重要。对于有意深入研究Node.js的开发者来说,通过分析源码来...

    基于C语言的Linux文件管理系统源码.zip

    在本项目中,我们关注的是一个使用C语言编写的Linux文件管理系统。...通过阅读和分析源码,可以了解到如何在Linux环境下实现这些基本操作,这对于系统编程和内核开发的学习者来说是非常宝贵的实践经验。

Global site tag (gtag.js) - Google Analytics