printf 格式化输出符号详细说明

%a 浮点数、十六进制数字和p-记数法(C99)

%A 浮点数、十六进制数字和p-记法(C99)

%c 一个字符(char)

%C 一个ISO宽字符

%d 有符号十进制整数(int)(%ld、%Ld:长整型数据(long),%hd:输出短整形。) 

%e 浮点数、e-记数法

%E 浮点数、E-记数法

%f 单精度浮点数(默认float)、十进制记数法(%.nf 这里n表示精确到小数位后n位.十进制计数)

%g 根据数值不同自动选择%f或%e.

%G 根据数值不同自动选择%f或%e.

%i 有符号十进制数(与%d相同)

%o 无符号八进制整数

%p 指针

%s 对应字符串char*(%s == %hs == %hS 输出 窄字符)

%S 对应宽字符串WCAHR*(%ws == %S 输出宽字符串)

%u 无符号十进制整数(unsigned int)

%x 使用十六进制数字0f的无符号十六进制整数 

%X 使用十六进制数字0f的无符号十六进制整数

%% 打印一个百分号

%I64d

用于INT64 或者 long long

%I64u

用于UINT64 或者 unsigned long long

%I64x

用于64位16进制数据

①%:表示格式说明的起始符号,不可缺少。

②-:有-表示左对齐输出,如省略表示右对齐输出。

③0:有0表示指定空位填0,如省略表示指定空位不填。

④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。

⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

---------------------------------------

格式字符

格式字符用以指定输出项的数据类型和输出格式。

①d格式:用来输出十进制整数。有以下几种用法:

%d:按整型数据的实际长度输出。

%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。

②o格式:以无符号八进制形式输出整数。对长整型可以用”%lo”格式输出。同样也可以指定字段宽度用“%mo”格式输出。

例:

main()

{ int a = -1;

printf(“%d, %o”, a, a);

}

运行结果:-1,177777

程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。

③x格式:以无符号十六进制形式输出整数。对长整型可以用”%lx”格式输出。同样也可以指定字段宽度用”%mx”格式输出。

④u格式:以无符号十进制形式输出整数。对长整型可以用”%lu”格式输出。同样也可以指定字段宽度用“%mu”格式输出。

⑤c格式:输出一个字符。

⑥s格式:用来输出一个串。有几中用法

%s:例如:printf(“%s”, “CHINA”)输出”CHINA”字符串(不包括双引号)

%ms:输出的字符串占m列,如果字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。

%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。

⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:

%f:不指定宽度,整数部分全部输出并输出6位小数。

%m.nf:输出共占m列,其中有n位小数,若数值宽度小于m左端补空格。

%-m.nf:输出共占m列,其中有n位小数,若数值宽度小于m右端补空格。

⑧e格式:以指数形式输出实数。可用以下形式:

%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。

%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。

⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

---------------------------------------

关于printf函数的进一步说明:

如果想输出字符”%”,则应该在“格式控制”字符串中用连续两个%表示,如:

printf(“%f%%”, 1.0/3);

输出0.333333%。

---------------------------------------

对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.

对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.

—————————–可变宽度参数

对于m.n的格式还可以用如下方法表示(例)

char ch[20];

printf(“%*.*s\n”,m,n,ch);

前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。

sublime2 配置java shell运行

最近学校一直在教java,老觉得别的IDE用的各种不爽,还是想用自己的Sublime,在网上查找了一些方法,发现都是在sublime调试输出的,这样的缺点就是无法接受用户输入,所以我稍作改变,调用一个cmd出来解决这个问题。

1. 首先需要配置java的path环境变量

这个很好说,环境变量里配置就好了,如果不会自行百度。

2. 打开jdk的bin目录,新建runJava.bat,内容如下:

3. 回到Sublime,打开菜单Preference,选择Browse Packages,找到java文件夹下的JavaC.sublime-build文件,打开编辑。

4. 然后我们随便写一个需要用户输入的java程序,比如

4. 然后Ctrl+B运行
捕获

奇怪的两种@符号所引起的问题

最近笔者在编写移动端程序的时候,发现原先是用的@+命令没有效果,一直纳闷是什么原因?

最后发现问题出在安卓上的百度输入法!

百度输入法在中文和英文中提供了两种@符号,请看下图。

Screenshot_2014-04-22-00-04-59Screenshot_2014-04-22-00-05-05

经过分析,这两种@符号明显不同,中文版的at符号实际上为:,在经过unicode解析后,我们发现的编码为\uff20,而不是我们常见英文@的\u0040。这就导致如果我们PHP写下面的代码,就无效了。我们必须要对另外一种@符号进行判断

笔者之前一直以为@符号是中英文通用,也许是笔者之前的想法是错误的,不过这个符号的确给我带来了一些困扰,不知道百度输入法为什么要使用另外一个@符号呢?

 

使用Kses PHP 过滤HTML类 适配THINKPHP

根据HTML标签,属性来进行过滤的类,用于安全处理用户的富文本
在用户前台应用了富文本编辑器,这就使得HTML输出时面临XSS等危险代码的风险。为了解决这个问题,互联网上有很多正则替换的方法,但是都不是很保险且扩展性不高。

后来我在代码仓库中找到了Kses类,这是一个可以根据HTML标签,属性来进行过滤的类,修改了一下就可以适配THINKPHP了。

Kses的版权和相关协议归原作者所有。

———————–我是华丽丽的分割线—————————

Kses大家应该都不陌生,wordpress的富文本内容的过滤应用的就是这个东西。它的安全性还是可以保障的(如果有漏洞希望大家也反馈反馈!,我没进行具体的测试)

我修改后的类文件需要PHP5+THINKPHP3.2环境,如果你不是,请根据源文件和我的修改说明二次开发即可(原作者提供了PHP4的版本….)

下面我只讲解一下常用的方法,更多的方法可以参考附件里面的原作者提供的文档(是英文)。

首先,在配置文件中加入KSES_ALLOWED_PROTOCOLKSES_ALLOWED_HTMLKSES_ALLOWED_GLOBAL_ATTR元素,他们的意义分别为:允许的协议,允许的HTML元素及其属性,和允许的全局属性。

下面举个例子:

第一,我们允许用户在富文本中使用p元素和a元素,并且p元素不允许使用任何属性,a元素只允许使用href、name和target属性,我们在KSES_ALLOWED_HTML这么写:

第二,我们允许用户在富文本中使用http、ftp和mailto连接协议,比如在a元素的href和img元素的src,我们在KSES_ALLOWED_PROTOCOL这么写:

第三(可选),我们允许用户在富文本中所有HTML元素里使用title,style属性(这回覆盖我们设置的第一个步骤),我们可以在KSES_ALLOWED_GLOBAL_ATTR里这么写:

然后我们在需要执行HTML过滤的地方实例化Kses类

命名空间(这个可能每个人不一样):

然后实例化,使用Parse方法

类似下面这个样子:

那么如果我们是按照上面3步来设置的,最终会输出

有人问为什么p元素支持style属性,请看第三步

———————–我是华丽丽的分割线—————————

上面是一个全部通过过滤的例子,再举几个不通过的。

如果我们的代码为

那么style2连同后面都会被过滤掉,因为P元素和全局都没有设置允许使用style2属性。

如果我们代码:

整个img元素会被过滤掉,因为我们没有允许使用img元素(请看第一步)

附加!!全局属性请注意:

如果全局属性允许了style,那么系统只允许使用部分安全的CSS属性,比如上面的text-align就可以,但text-align2就不可以了。具体的这个项目在类文件的safecss_filter_attr方法,我已经内置了常用的CSS属性,如果需要扩展请自行修改。

比如我们写代码

那么text-align2这个会被过滤掉

———————–我是华丽丽的分割线—————————

其实Kses还支持很多功能,比如还可以限制某个HTML元素属性填写多少字符的内容,更多的方法请参考附件中Kses的手册。

下面说一下我在类中修改了那些内容,我是从oop/php5.class.kses中修改过来的,只支持PHP5 + THINKPHP3.2哦!

修改日志 ( 2014-4-13 )
1. 增加命名空间,和配置等以适应THINKPHP
2. 修改类名。
3. 2014-4-13 01:21:01 修正参数名称BUG一个。
4. 增加了全局属性,以及CSS检测(也就是例子中的步骤三实现的功能)

大家注意看第三条,这是原作者版本中诡异的拼写错误,在oop/php5.class.kses的958行中,请把string2参数换成string。

我在附件中提供的原版是没有修改这个BUG的(THINKPHP适配版本肯定已经修改了),所以如果你要看原版演示,先把这个拼写错误修复了。

———————–我是华丽丽的分割线—————————

如果有什么问题大家可以再问!谢谢

下载KSES原版和THINKPHP适配版本

project management 项目管理用书 中文版

这些天苦于翻译自己项目管理这一科目的书,虽然每个单词看起来都认识但是很难连接成完整的句子,在网上找了很久终于发现这本书叫做

项目管理:计划、进度和控制的系统方法(第10版)

Project Management: A Systems Approach to Planning, Scheduling, and Controlling

现在把中文版的PDF分享一下

http://pan.baidu.com/s/1ntkKlo1

multiple choice的实际意义究竟代表什么

最近有同学在问multiple choice究竟是多选题还是单选题,首先我们来看看卷子上写的:

Attempt to answer all of the 10 multiple-choice questions below. For each question, only one answer from the four solutions provided is correct; you must select the correct response by placing a clearly-visible X mark in the corresponding box on the answer grid.

看完肯定就知道multiple choice当然是单选题,不过这个multiple究竟是什么意思呢?

multiple

英 [ˈmʌltɪpl]

美 [ˈmʌltəpəl]

adj.

n.

这就是中英两种语言文化的差异了!

multiple choice 译成中文,为了方便大家理解,叫单项选择

英语multiple choice的表述意思是:这题有多个备选项。

所以单项选择题=multiple choice

在各自的语言里,人们一般不会有疑问的。汉语里的“单项选择”和“多项选择”,中国人是不会分不清的,就是要你“只选一项”和“可选多项”嘛。以英语为母语的人 对 “Multiple Choice” 的理解 也不会有疑问。可是,一旦牵涉到两种语言,即当英语的“Multiple Choice”被译成汉语的“单项选择”,各种各样的疑问就来了。

1 、若“单项选择=multiple choice”,那么,多项选择英语怎么说?

2 、若“多项选择=multiple choice”,那么,单项选择是不是 single choice?

3 、“ multiple ”的词义是“多个的、由多个组成的”,那么 Multiple choice 应该是多项选择,但都是选一个正确答案,那不成了单项选择了吗?

4 、“ multiple choice ”是提供多个选择项,难道还有提供单个选择项的吗?那还用选择吗?

对于“从多个选项中选一”的这类选择题,汉语叫“单项选择”而英语是叫“ multiple choice ”。 汉语中的“单项选择”是说“只选一项”,英语中的“ multiple choice ”是说“多项备选”,换句话说,就是汉语要“选择单项”而英语里说“多选择项”。 本质一样, 名称着眼点不同。

既然“ multiple choice ”是“多项备选”,就不该存在“单项备选”的single choice了,一个选项备选,逻辑上没法讲。

汉语的“多项选择”在英语里如何表达?可能会标明“正确答案不止一个 (more than one answer is correct) ”或要求“选出所有正确答案( mark out all correct answers )”

JS实时预览Minecraft的皮肤,可以3D旋转,调整动作等功能

这些阵子博主在负责Whatever Minecraft 随便MC 服务器的网站建设工作。

为了让上传皮肤界面更加友好,我在github上面找到了这个项目,但是不知道为什么github上的没有办法运行,于是我把作者的DEMO给下载了下来。

这里运用到了Three.js和HTML5 canvas的代码,但是不太了解的同学也可以轻松使用这个插件。

调用的时候使用MSP下面的changeSkin之类的函数加上URL就可以了

注意的是,浏览器最好支持WEBGL,也就是说用Chrome或者现在360的极速8都可以。如果不支持,将采用代替WEBGL的方法渲染,但是分辨率可能会略低。

网盘传送门:http://pan.baidu.com/s/1gdzjzW3

 

QQ截图20141008162309