c语言code用法_visual code c语言

c语言code用法_visual code c语言此文章出处:http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html先看个例子:汉字一的UTF-8编码为0xE40xb80x80我们在google里搜索一下“一”,地址栏显示为:可以看到url的字符串里有一个%E4%B8%80这就是encode之后的值。因此,encode的处理过程也很明显了。特别是传中文参数时,如果没…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

此文章出处:http://www.cppblog.com/izualzhy/archive/2012/07/09/182456.html

先看个例子:

汉字 一 的UTF-8编码为0xE4 0xb8 0x 80

我们在google里搜索一下“一”,地址栏显示为:

0818b9ca8b590ca3270a3433284dd417.png

可以看到url的字符串里有一个%E4%B8%80

这就是encode之后的值。因此,encode的处理过程也很明显了。

特别是传中文参数时,如果没有encode,很容易出错。

至于为什么要这么传,就不知道了,今天,现来看下C语言如何实现url encode函数.

首先是urlencode的编码规则,可以看这里,搜到一篇文章没有仔细研究,可能有不全的地方:

/*

* =====================================================================================

* Filename: url_decode.cpp

* Description: url decode

*

* Created: 07/06/2012 07:35:14 PM

* Author: zhy (), izualzhy@163.com

* =====================================================================================

*/#include#include#defineNON_NUM ‘0’inthex2num(charc)

{if(c>=’0’&&c<=’9′)returnc -‘0′;if(c>=’a’&&c<=’z’)returnc -‘a’+10;//这里+10的原因是:比如16进制的a值为10if(c>=’A’&&c<=’Z’)returnc -‘A’+10;printf(“unexpected char: %c”,c);returnNON_NUM;

}/**

* @brief URLDecode 对字符串URL解码,编码的逆过程

*

* @param str 原字符串

* @param strSize 原字符串大小(不包括最后的\0)

* @param result 结果字符串缓存区

* @param resultSize 结果地址的缓冲区大小(包括最后的\0)

*

* @return: >0 result 里实际有效的字符串长度

* 0 解码失败

*/intURLDecode(const char*str,const intstrSize,char*result,const intresultSize)

{charch,ch1,ch2;inti;intj =0;//record result indexif((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) {return0;

}for(i=0; (i

}else{break;

}default:result[j++] =ch;break;

}

}result[j] =0;returnj;

}intmain(intargc,char*argv[])

{char*src =argv[1];charobj[100] = {0};unsigned intlen =strlen(src);intresultSize =URLDecode(src,len,obj,100);printf(“result: %d, %s\n”,resultSize,obj);return0;

}

编码:

/*

* =====================================================================================

* Filename: url_encode.cpp

* Description: url encode

*

* Created: 07/04/2012 08:32:24 PM

*

* Author: zhy (), izualzhy@163.com

* =====================================================================================

*/#include#include/**

* @brief URLEncode 对字符串URL编码

*

* @param str 原字符串

* @param strSize 原字符串长度(不包括最后的\0)

* @param result 结果缓冲区的地址

* @param resultSize 结果缓冲区的大小(包括最后的\0)

*

* @return: >0:resultstring 里实际有效的长度

* 0: 解码失败.

*/intURLEncode(const char*str,const intstrSize,char*result,const intresultSize)

{inti;intj =0;//for result indexcharch;if((str==NULL) || (result==NULL) || (strSize<=0) || (resultSize<=0)) {return0;

}for(i=0; (i=’A’) && (ch

((ch>=’a’) && (ch

((ch>=’0′) && (ch

}else if(ch ==’ ‘) {result[j++] =’+’;

}else if(ch ==’.’||ch ==’-‘||ch ==’_’||ch ==’*’) {result[j++] =ch;

}else{if(j+3

}else{return0;

}

}

}result[j] =’\0′;returnj;

}intmain(intargc,char*argv[])

{char*src =argv[1];unsigned intsrclength =strlen(src);printf(“src length: %d\n”,strlen(src));charobj[100] = {0};URLEncode(src,srclength,obj,100);printf(“obj: %s\n”,obj);printf(“obj: %d\n”,strlen(obj));return0;

}

输出:

y@y-VirtualBox:/mnt/Documents/Training$ ./url_encode 一^abc_二

src length: 11

obj: %E4%B8%80%5Eabc_%E4%BA%8C

obj: 25

y@y-VirtualBox:/mnt/Documents/Training$ ./url_decode %E4%B8%80%5Eabc_%E4%BA%8C

result: 11, 一^abc_二

使用google搜索下:

0818b9ca8b590ca3270a3433284dd417.png

注:

1.AA –> “%AA”,使用sprintf。

2.”%AA” –> AA, 使用位移。

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188124.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 回顾JPS命令_实时打印日志命令

    回顾JPS命令_实时打印日志命令一概述jps是jdk提供的一个查看当前java进程的小工具,可以看做是JavaVirtualMachineProcessStatusTool的缩写。非常简单实用。命令格式:jps[options][hostid][options]选项:-q:仅输出VM标识符,不包括classname,jarname,argumentsinmainmethod-m:输出mainmethod的参数-l:输出完全…

  • 前端必备技能之如何制作精灵图「建议收藏」

    前端必备技能之如何制作精灵图「建议收藏」为什么要用精灵图?比如京东首页的这些icon,如果每个icon都去请求一个资源。是非常浪费资源的。因为我们浏览器在同一个域名下并发加载的资源(CSS、JS、图片等)数量是有限的。我们可以将这些icon放到一张图片,通过截取这张图片的不同的区域,拿到不同的icon制作一个背景透明的Icon截图你喜欢的logo,最好是正方形。打开ps,使用快速选择工具选择白色区域ctrl+x删除…

  • 《Python 快速入门》C站最全Python标准库总结

    《Python 快速入门》C站最全Python标准库总结❤粉丝福利:免费下载海量【PPT模板、简历模板、学习资料】

  • NE问题分析

    一.crash(NE)问题1.找到堆栈信息一般堆栈在Androidlog或者tombstore里面,androidlog里面直接搜libsurfaceflinger或者surfaceflinger定位到log,SW-WDtombstore文件是系统在系统发生NE是抓到的堆栈信息,可能会包含多份文件,找的需要的即可2.解析堆栈backtrace信息,主要看调用栈,我们能从中得到发生问题的具体代码行号,比如:#01pc00000000000642fc/apex/com.android

  • utf8在mysql占几个字符_utf-8的中文,一个字符占几个字节「建议收藏」

    utf8在mysql占几个字符_utf-8的中文,一个字符占几个字节「建议收藏」https://blog.csdn.net/kindsuper_liu/article/details/80202150英文字母和中文汉字在不同字符集编码下的字节数英文字母:·字节数:1;编码:GB2312字节数:1;编码:GBK字节数:1;编码:GB18030字节数:1;编码:ISO-8859-1字节数:1;编码:UTF-8字节数:4;编码:UTF-16字节数:2;编…

  • 京东创始人是刘强东和谁_日本软银最大股东是谁

    京东创始人是刘强东和谁_日本软银最大股东是谁京东可以说是众所周知的一个购物平台,京东的自营可以说是给人们提供了很多方便性和可靠性。创始人刘强东靠着自己坚韧的毅力,以及卓越的非凡见识,一步一步地把京东做到了最强。可以说也是不容易啊,其中流下的辛

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号