前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇数据类型范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
变体型是一种特殊的数据类型,除了定长字符串数据及用户定义类型外,可以包含任何种类的数据。变体型数据,是一种可变的数据类型,它能够表示所有系统定义类型的数据。变体型变量可以在程序执行期间存放不同类型的数据,VB会自动完成任何必要的转换。
VB的基本数据类型有:数值型数据、日期型、字节型、货币型、逻辑型、字符串型、对象型、变体型。
(来源:文章屋网 )
关键词:C语言教材;格式转换;printf()函数;指针
How to print a pointer properly
HUANG Ying
(School of Computer and Software Engineering, Nanjing Institute of Industry Technology, Nanjing, Jiangsu, 210046)
Abstract:We discussed the output issue of the pointer type data in C Language.According to the national standard , we pointed out errors of the pointer output commonly existing in the textbooks about the C language programming.And we elucidated the proper method of the point output.
Key words:the textbooks of the C language;conversion specifacation;printf() function;pointer
1 引言
指针是C语言中的一种数据类型。国内许多C语言教材在讲解这种类型数据的输出时,都存在着若干错误。例如,[4]第248页:
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
printf("%d,%d\n",a,*a);
这里,作者用了“%d”格式转换输出a和*a这两个指针类型表达式的值。
实际上,这种做法是错误的。但是由于这种错误相对于代码语法错误来说不是那么直截了当而是比较隐晦,所以往往容易被视而不见,甚至被误以为是正确的写法。
2 为什么用“%d”输出指针是错误的
除了使用“%d”这种错误的格式输出指针类型数据,使用“%o”、 “%x”(或“%X”)及“%u”等几种错误转换格式的情况也很常见。例如,[4]第224页:
printf("%o",p);
作者认为这条语句的“作用是以八进制形式输出指针变量p的值”。
由于这几种错误的性质类似,所以这里也一并讨论。
首先,根据[1]、[2]、[3],“%d”这种格式只用于输出int类型的数据,输出的结果为十进制整数形式的字符序列――“[-]dd…d”,因此,在一定条件下将输出一个负的十进制整数。仅此一点就足以断定用“%d”格式输出指针是错误的。因为指针数据类型并不等同于int数据类型;指针数据类型的值表示地址,然而地址不可能是负值。
既然地址不可能是负值,而“%o”、“%x”(或“%X”)、“%u”这几种格式的输出结果都不是负值,那么用这几种格式输出指针类型的值是否可以呢?同样不可以。
根据[2]、[3],“%o”、“%x”(或“%X”)、“%u”这三种格式都只用于输出unsigned类型的数据。unsigned数据类型和指针数据类型是截然不同的数据类型。C语言并没有规定指针类型数据的内部表示应该和unsigned类型一致,甚至没有规定这两种类型数据在机器内部应该如何表示,而且这两种数据的尺寸也未必相同。事实上,C语言自C89开始,就要求编译器应提供“stddef.h”并在其中提供“ptrdiff_t”类型的定义。“ptrdiff_t”类型这种类型是两个指针做减法运算得到的结果的类型,这间接地说明了指针数据类型并不必然等同于整数类型的尺寸。因此使用“%o”、 “%x”(或“%X”)及“%u”输出指针毫无依据可言,因而是错误的用法。
[3](§7.19.6.1,p280)为此特意指出,“If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.”。这表明使用“%d”、“%o”、“%x”(或“%X”)、“%u”输出指针数据是一种未定义行为(undefined behavior)。未定义行为本质上就是程序的一种错误。因为编译器此时有任意的处理方式,都不违背语言标准。从代码的角度来说,使用“%d”、“%o”、“%x”(或“%X”)、“%u”都是没有明确意义的代码,没有明确意义的代码当然是错误的代码。
许多使用“%d”、“%o”、 “%x”(或“%X”)及“%u”这几种格式输出指针的人往往有一个误区,这个误区来自于经验,那就是使用这种格式输出指针并没有出现错误,因而他们认为可以使用这些格式输出指针。
然而,这种想法是根本站不住脚的。仔细推敲一下就不难发现,这种推理的基础是基于使用个别编译器的经验而已。个别编译器当然不代表所有编译器。这个道理就如同在某个编译器上int类型的尺寸是2B,但绝不能说C语言的int数据类型的大小就是2B一样。
因此,在个别编译器上,指针尺寸的大小和表示方法可能确实与某种整数类型相同,但这绝不能说明在所有的编译器上指针的大小和表示方法都和某种整数类型相同。
如果考察的范围广些,不难发现,指针就其一般而言,和整数类型大小不同的例子很多。在这种情况下,[4]第248页中的程序就会产生错误。例如,在针对DOS操作系统的编译器MSC 6和TC在以大内存模式编译时,这段程序就会得到错误的行为;此外,在不少64位机器环境下的编译器中,以“%d”、“%o”、 “%x”(或“%X”)及“%u”这几种格式输出指针类型的值也显然会发生错误。原因就在于,错误地假设了整数类型与指针类型具有相同的表示和尺寸。
3输出指针正确的转换说明
由于由于在各种不同环境下,指针的尺寸未必和任何整数类型相同,因为实现可能支持多种尺寸的指针。所以无论是K&R的经典名著[1],还是国家标准C90[2],以至于目前最新的国际标准C99[3],都明确指出调用格式化函数(如printf()、fprintf()等)输出指针类型数据的值应该使用转换说明符p,此时,对应的“实参应为指向void的指针。该指针的值将以实现定义的方式转换为一系列可印刷字符”。具体的输出的结果显然和具体实现有关。
虽然格式化输出函数只能输出void *类型的指针,但由于printf()函数的函数原型为:
int printf ( const char* , ... ) ;
C语言规定,与“...”部分相对应的指针类型的实参,在调用时都将被按照隐式类型转换的规则一律转换为“void *”类型的指针,因此,%p这种转换输出格式实际上同样适合于输出其他类型指针的值。
由此,不难得出结论,调用printf()函数输出指针类型的值,应该使用%p格式转换声明。所以,[4]第248页的代码,正确的写法分别应该是:
printf("%p,%p\n",a,*a);
当然,由于输出的结果是“实现定义的”,所以在不同的实现中的输出结果的形式可能并不相同。
4 结束语
根据前面的分析和讨论,可以得到如下的结论:
1. 指针数据类型并不等同于任何整数类型。
2. 用“%d”、“%o”、 “%x”(或“%X”)及“%u”这几种格式输出指针类型的值是错误的未定义行为。
3. 应该用“%p”转换格式输出指针类型数据的值。
本文指出的错误并非是今天才出现的,事实上二十年时间前出版的C语言教材[5]就已经存在这两种错误。作为教材,应该遵循标准,教给学生具有一般性的通用性的知识。然而,近二十年间这个错误竟然没有得到改正,这是非常令人震惊的事情。在此期间,不少以[4]、[5]为参考编写的C语言教材或书籍中同样也存在类似的错误,可见这两个错误的影响之广泛及深远。
为此本文正式指出这个错误并予以更正,希望这个错误不至于再以讹传讹地流传下去。
参考文献:
[1]. Brian W.Kernighan, Dennis M.Ritchie. C程序设计语言.清华大学出版社,1998
[2]. 国家技术监督局,GB/T 15272-94 程序设计语言C,1994
[3]. International Organization for Standardization,ISO/IEC 9899:1999.[ISO]
关键词: ; SQL Server; 二进制; 上传与读取
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2013)03-29-03
0 引言
在开发系统软件过程中,经常会遇到需要存储各种类型的数据,如不同类型的文档、图片、音频数据等。我们通常采用两种方法来存储这些不同类型数据:把文件保存在服务器的文件系统中,而把文件名保存在数据库字段中;或直接保存在数据库的字段中。
如果把文件保存在服务器的文件系统中,而把文件名保存在数据库字段中,这种方法比较简单;如果把文件名保存在数据库中则会需要编写更多的代码,这种方法修改数据不需要与数据库打交道,可以直接更改文件。由于后者并没有真正把数据保存在数据库中字段中,使用中则会遇到很多问题:有悖于数据的完整性规则,直接保存在硬盘上的文件容易被误操作而删除;另外,使用文件系统,一旦操作系统被非法用户访问就会不要授权而直接访问数据文件。如果把数据保存在数据库中,通常对数据库的安全性要求较高,对数据的访问和修改需要授权。
我们采用将数据保存在数据库的字段中的方法。所采用的数据库为SQL Server2000。SQL Server2000数据库供了一种image的数据类型,可以用来存放大容量类型数据,最大容量为2GB,能够存放大量的不同类型数据。开发平台为2005,开发工具使用,编程语言采用C#语言。本文介绍了基于和SQL Server2000情况下将数据直接存储在数据库内的不同类型文件的上传和读取的具体实现过程。
1 数据库设计
1.1 数据库序列对象
为了实现ID的自动增加,建立数据库序列对象如下:
标识:是
标识种子:1
标识递增量:1
1.2 表的设计
数据表的设计如表1所示。
2 文件的上传
2.1 上传界面
上传界面如图1所示。
2.2 文件的上传
4 结束语
当开发系统软件需要上传和读取二进制数据时,我们需要考虑采用何种方法保存数据。如果我们把文件存储在数据库中,那么就需要懂得更多的数据知识。在本文中,我们分析了基于和SQL Server 2000情况下将不同类型数据保存到数据库中,以及如何对其进行读取。
参考文献:
[1] 曹锰.C#与程序设计[M].西安交通大学出版社,2005.
[2] 欧立奇.Visual C#.NET案例开发集锦[M].电子工业出版社,2005.
[3] 童爱红.Visual C#.NET应用教程[M].清华大学出版社,2004.
数据挖掘 数据解析 网络业务类型划分 聚类算法
1 引言
21世纪信息和通信技术高速发展,技术的进步给人们的日常生活带来了诸多便利。通讯是社会交往中的重要纽带,推动着数字信息的发展。通信行业的大数据应用,能够优化移动通信网络,开拓更丰富的服务业务,为移动用户提供更精准、更便捷的服务。
Gn数据是Gn口原始码流解析得到的数据,主要反映用户使用各类数据业务的详细情况。在传统的Gn数据解析过程中,流量类型里“未识别TCP流量业务”、“未识别UDP流量业务”和“DNS解析流量业务”等类型均被划为未知服务。这样的计算模型会导致解析结果里未知服务的占比很高。
本文针对原始Gn数据,提出了一种新的网络业务分类方法:利用大数据并行计算模式解析DNS业务里的URL,解析结果通过挖掘算法(基于密度的聚类算法)模型处理,以确立新的网络业务类型。
2 技术介绍
2.1 大数据处理步骤
大数据的飞速发展已经影响到了各行各业,其中信息、互联网和通信行业受到的影响最大。大数据的到来恰逢通信行业的转型过渡阶段,给这个行业注入了新鲜的血液。
大数据处理方法通常为四步,分别是原始数据的采集、数据导入和预处理、数据的统计和分析以及数据挖掘。下面将按照这四个步骤的顺序进行阐述。
(1)数据采集
数据的采集阶段是指用数据库来接收以Web、App等形式传送的数据,在大数据的采集过程中,最主要的问题是处理高并发数,同一时间c可能会有上万条申请操作。而采集阶段通常采用的优化方式是在这些数据库之间进行分时分片管理和负载均衡。
(2)数据导入和预处理
数据导入指的是将原始数据导入到分布式存储集群,并且在导入过程中,对数据做去除噪声点、筛选特定条件等清洗工作。导入和预处理过程中面临的主要效率瓶颈是网络带宽和磁盘IO。
(3)数据统计和分析
大数据场景下的统计与分析主要通过分布式计算集群来对数据进行分析和分类汇总等,在这一阶段,最常用的两个计算框架是Hadoop和Spark。统计与分析遇到的主要问题是,分析时所涉及的数据量通常很大,其对系统资源会造成极大的占用。
(4)数据挖掘
数据挖掘阶段是一个知识发现的过程,一般没有预先设定好的主题。比较典型的算法有用于聚类分析的K-means算法、用于统计学习的SVM算法和用于分类的Na?ve-Bayes算法。该过程的特点主要是用于挖掘的算法一般比较复杂,考虑到系统资源的开销,需要选择合适的计算框架。
2.2 基于聚点密度和距离的高效聚类算法
把一个数据集分割成不同的类或簇,使得同簇内数据对象的相似性尽可能大,不同簇中数据对象的差异性也尽可能地大,通常采用聚类算法。从传统的聚类分析方法来看,在进行聚类之前都需要先确定要聚类的类别数目,然而在现实运营数据的分析过程中,聚类的类别结果通常是未知的,一般要经过多次实验来获得相对合适的聚类数目。考虑到本文中要分析的数据是多维度的结构化数据,且聚类结果不需要人工干预,可以参考Alex Rodriguez和Alessandro Laio提出的新的聚类算法,下面对此聚类算法做简要介绍。
该算法假设所确定的类簇中心点是由一些局部密度相对其较低的点所环绕,并且这些点与其他高局部密度点(其他类簇中心点)的距离都比较大。首先定义两个值:局部密度ρi以及到其他高局部密度点的距离δi。
ρi=Σj X(dij-dc) `(1)
(2)
公式中dc是一个临界变量值,是一个预先设定的参数。从公式(1)和(2)可以得出,ρi相当于和点i的距离差值小于dc的点的个数。由于该算法只对ρi的相对值敏感,所以面对大数据量时,为了算法的健壮性,对dc的选择最好使得平均每个点的邻居数为所有点数量的1%~2%。
δi=minj:ρj>ρi (dij) (3)
根据公式(3),δi用来表示点i和点j直接的距离,其中ρj>ρi。对于ρ值最大的点,设置其δi=maxj (dij)。
局部密度ρi和据其他中心点距离δi的值均很大的点被认为是类簇的中心。局部密度较小但是δi较大的点则是异常点。在确定了类簇中心之后,非中心点属于其距离最近的类簇中心所代表的类簇。
图1是以ρ为横坐标、以δ为纵坐标的决策图。可以看到,1号和10号两个点的ρi和δi都比较大,可以作为聚类焦点。11、12、13三个点的δi比较大,但是ρi较小(周围点密度太小),所以是异常点,在聚类过程中将被清洗掉。
3 服务类型划分系统模型设计
传统的Gn数据解析过程中,在流量类型字段里,将“未识别TCP流量业务”、“未识别UDP流量业务”和“DNS解析流量业务”划为未知服务。这样的计算模型导致Gn数据解析后,业务类型里会有很高占比的未知服务。解决大量的“未知服务”的分类结果,既可以最大化地利用原始数据,又可以在多维度的情况下,细分用户的网络业务。系统采用分布式集群架构,如图2所示,分为数据获取、数据清洗、数据解析、数据云存储、数据模型挖掘、挖掘结果分析几个步骤。
数据获取阶段,将Gn接口数据通过FTP的方式将数据传送给数据清洗模块。
数据清洗主要是完成无效字段的替换,将RNC解析流量对应URL为空的记录删除,并完成目标数据的选取,将Gn原始数据类型中流量类型为RNC解析流量的记录截取出来。
数据解析,如图3所示,所映射的URL包括查询的域名及查询类型。解析URL需要解析协议(如http、https)、域名或IP、端口号(如7001、8080)、Web上下文、URI,请求资源地址等。此处需要解析出域名,并将其存储为一个新的字段。做一个URL映射表,将访问域名进行归类映射,例如SINA映射为新闻咨询浏览,tianya映射为讨论类论坛,weibo映射为社交网络等。
数据云存储阶段,将解析后的数据以Parquet文件块的形式存储在HDFS上,作为数据挖掘接入口。
数据挖掘模型采用2.2节介绍的基于聚点密度和距离的高效聚类算法。将解析后的数据作为输入端,通过挖掘模型计算,自动生成聚类结果。此处需要注意的是,由于算法中dc变量值(表示测量点临界间距)需要事先设定好,所以为了得到合理的结果,需多次对数据进行训练,找到一个符合业务分析需求的特定值。另外,根据用户实际使用情况,同一种业务在不同时间段会产生不同的用户体验需求,以及每个人会有不同的使用习惯等,将输入参数定为业务发生时间、RNC解析URL域名、年龄这三个字段。
4 计算结果分析
经过多次训练,得到聚类分析结果,分别为:
(1)深夜(22:00―24:00),年龄
(2)中午(11:00―13:00),26
传统方式的Gn数据解析后,服务型分为流媒体业务、下载业务、即时通信、浏览业务和未知服务五类。结合聚类分析的结果可以初步判断,在未知服务内会有大部分人喜欢深夜使用社交网络服务,以及会有很多青年人会选择在中午的时候浏览新闻咨询。可以尝试在服务类型中将第五类未知服务新分出一类:社交网络服务,其确定的方法可以按照聚类的方式倒推,即匹配其解析后的URL。
5 结束语
本文对比传统的Gn数据解析方式,提出了一种基于数据挖掘的网络业务类型划分方法。在实际应用中,该方法在处理大规模数据和高维数据时性能有待于提高。针对这种情况,有学者提出一种在高维空间挖掘映射聚类的方法PCKA,它能从多个维度中筛选出相关的维度,并根据相关维度进行聚类。另一方面,如需要对全国范围的Gn数据业务分类,应使用更全面的数据进行模型训练。
参考文献:
[1] 陈宇. 京广高铁GPRS业务Gn接口数据监测的应用[J]. 郑铁科技, 2013(1): 23.
[2] 韩宇. 基于数据挖掘的联通运营监控模块的设计与实现[D]. 沈阳: 东北大学, 2011.
[3] 陈平,郭兰珂,方俊湘. 微信业务的识别方法研究[J]. 移动通信, 2013,37(18): 80-83.
[4] 郑桂凤. 移动互联网的用户行为分析系统的设计与实现[D]. 北京: 北京邮电大学, 2010.
[5] 闫春荣,牟宏蕾,郝亚飞. 移动通信大数据信息在决策分析平台中的应用方案研究[J]. 移动通信, 2016,40(10): 24-28.
[6] 李玲俐. 数据挖掘中分类算法综述[J]. 重庆师范大学学报: 自然科学版, 2011(4): 44-47.
[7] 刘明吉,王秀峰. 数据挖掘中的数据预处理[J]. 计算机科学, 2000,27(4): 54-57.
[8] 胡志风. 大数据在职务犯罪侦查模式转型中的应用[J]. 国家检察官学院学报, 2016(4): 144-153.
[9] 郑雅丽. 图书馆应用大数据的策略研究[J]. 科技视界, 2015(12): 163-164.
关键词:刑事诉讼法 证据 电子数据
中图分类号:D9 文献标识码:A 文章编号:1008-925X(2012)O9-0058-01
电子数据(electronic data),是指基于计算机应用、通信和现代管理技术等电子化技术手段形成包括文字、图形符号、数字、字母等的客观资料。2012年第十一届人大五次会议,修改并通过了《中华人民共和国刑事诉讼法》,其中将“电子数据”作为了司法证据的一个种类,本文就是浅析电子数据在作为电子证据使用的一些问题。
一、 电子数据在法律上的定位
电子数据作为一种新形式的证据,其概念、范围、采纳、采信问题已引起理论界和实务界的普遍关注。从现有的有关电子数据的立法文件来看,“电子数据”有广义和狭义之分。前者认为“数据信息”是通过电子学手段、光学手段或其他类似手段生成、发送、接受或存储的信息,它包括但不限于电子数据交换、电子邮件、电报、电传或传真。而后者则认为“电子数据”专指电子网络信息。
在我国,学界对电子数据的法律地位的探析虽然一直处于长期的争论状态,但是对电子数据能否作为法定证据这一问题基本上能达成肯定的共识,电子数据作为证据在司法实践中也开始以“模糊”形式被逐渐采用。因此,我国电子证据问题在立法上缺乏完整和切实的法律规制的现状,迫切需要得到立法领域的回应。已不可避免地要面临对刑事证据的具体法律调整问题。此次新刑诉法第五章第四十八条就将电子数据作为证据的一种单列出来。
二、电子数据的范围和特征
根据以往的司法实践和计算机、网络等技术的层面考虑,电子数据的范围应界定为能够证明案件真实情况的,以物理方式存储于计算机系统内部及其各个层面(计算机网络的应用层、表示层、会话层、传输层、网络层、数据链路层与物理层等)或电子设备、手机、等移动存储或非移动存储介质(手机机身和SIM卡、电子芯片、内存、光盘、硬盘、软盘及辅助介质)当中的指令和资料,包括计算机程序和程序运行过程中所处理的信息资料(文本资料、运算资料、图形表格等)。其具有无形性、多样性、易破坏性、反复重现性、较高的精密性、高科技性、易保管性、易利用性及更强的客观真实性等特征。
三、电子数据的提取和勘验
电子数据由于自身的特征,往往对案件的侦办起到决定性的作用,但是又极易破坏和污染,所以司法机关的技术部门提取和勘验电子数据就显得至关紧要。其程序一般包括:现场勘验、发现预检载体、提取电子数据、排除无用信息和保存电子数据几个过程。基本要求为及时发现、规范操作和安全实施。过程一定要遵循以下原则:1、电子数据的客观性。电子数据是客观存在于各种存储介质中,如果不是人为的损毁是不会凭空消失的,那么就要求提取人员不能凭空一遭随意篡改。2、电子数据的关联性。看似电子数据存在的介质比较多,但是各种数据之间应该存在许多内部的关联,那就要求提取人员善于发现和总结,不放过任何有用的电子数据。3、提取的合法性。电子数据要作为证据,其收集的主体必须为具有国家司法机关认可的专业技术人员。另外电子数据的提取操作必须具有合法性,才能确保电子数据的合法性。
四、电子数据提取的主要技术手段和工具
1、电子数据信息搜索和过滤技术
面对杂乱的犯罪证据,技术人员往往感到无从下手,全盘提取电子证据又费时费力,这种情况下,信息搜索和过滤技术就显得尤为重要,通过特殊文件和字段的查找和多项电子数据的综合比对,可以快速找到关键的电子证据,筛选、挖掘出指定目标数据。
2、缺损电子设备存储数据取证技术
面对缺损的电子数据存储介质,则必须先修理存储介质再进行数据取证,那就必须用到光盘修复、闪存修复、硬盘修复、芯片读取、数据恢复等技术。
3、解密加密技术及口令获取技术
在司法鉴定取证的电子证据提取过程中,常常会遇到数据被加密等情况,让取证工作一度陷入困境。那么就需要一整套高速的密码分析和密码破解技术。能够深入分析Microsoft公司的windows操作系统和office办公办案软件加密机制的特点,采用国际领先的“多态全域覆盖”与“并行空间平衡”等技术,从密码数学层面大大缩短解密数值空间,同时进行算法以及工程实现方面进行优化,加大解密的速度和准确度。
4、源盘保护及电子证据固化技术
随着硬盘技术的发展,硬盘的容量越来越大,取证花费的时间变长,给电子证据的固化带来了新的挑战。硬盘高速克隆机、单向只读访问接口等设备的出现就解决了这样的难题,不光能支持多对多存储介质的克隆,且拷贝速度能达到18Gb/分钟。以保证在电子证据的提取中也保证只读不写,不污染目标证据,最大程度的保护了源盘。
目前常用的取证工具和取证实验室设备主要有:1、计算机取证类,包括现场勘察箱、快速取证机、硬盘克隆机、只读接口等;2、网络取证类,包括移动工作站、网络取证仪和WLAN无线定位系统等;3、手机取证类,包括手机检验包、手机信息和话单分析系统、SIM卡克隆机、小型数码翻拍仪等、手机数码设备信号屏蔽袋等;4、实验室类,主要包括预检工作站、检验工作站、密码破解工作站等;5、其他工具类设备,主要包括各类综合分析软件。