处理字符串的外部表示(Handling External Representations of Strings)CFString
来源:互联网 发布:心动网络官网电脑版 编辑:程序博客网 时间:2024/05/17 02:20
在核心基础中一个CFString的外部表现方式是在同一平台和不同的平台上将字符串数据写到磁盘和读出来的表单中。CFString对象格式化的外部表现是一个CFData对象。如果字符串的编码是Unicode编码,这个数据通常包含一个特殊字符叫做BOM("Byte Order Mark"),它指明数据的终止。当字符串外部表现是读操作,核心基础告诉BOM执行任何需要的字节交换。如果编码是Unicode不带BOM格式,这个数据被假定为大端。当你使用字符串对象去写出一个Unicode字符的外部表现时,BOM将会插入,除了编码常量创建的描述kCFStringEncodingUTF16BE,kCFStringEncodingUTF16LE,kCFStringEncodingUTF32BE和开CFStringEncodingUTF32LE。这些编码不要求BOM,因为字节序已经通过单词“BE(big-endian)”和“LE(little-endian)”明确的表明。
当你想保存通过CFString对象描述的字符数据,保存到磁盘文件或者发送到网络上的数据,首先你需要使用CFStringCreateExternalRepresentation函数转换CFString对象到CFData对象。CFData对象叫做CFString对象的“外部描述(External Representation)”。如果编码是Unicode编码,这个函数自动插入一个BOM(Byte Order Marker)到数据中表明终止。你可以使用CFStringCreateFromExternalRepresentation函数转换一个外部描述CFData对象到CFString对象。
列表1展示了外部描述(External-Representation)函数的用法。CFStringCreateExternalRepresentation最后一个参数指定一个损失字节,这个字符指定值不能转换到指定的编码。如果损失字节是0(像下面的例子中),转换将导致错误,结果将会是NULL。这个功能和CFStringGetBytes函数是类似的,然而由于CFStringCreateExternalRepresentation函数给你一个CFData对象会很方便。
列表1 使用外部描述函数
CFDataRef appendTimeToLog(CFDataRef log) {
CFMutableStringRef mstr;
CFStringRef str;
CFDataRef newLog;
CFGregorianDate date =
CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(),CFTimeZoneCopySystem());
str = CFStringCreateFromExternalRepresentation(NULL, log,
kCFStringEncodingUTF8);
CFShow(str);
mstr = CFStringCreateMutableCopy(NULL, 0, str);
CFStringAppendFormat(mstr, NULL,
CFSTR("Received at %d/%d/%d %.2d:%.2d:%2.0f\n"),
date.month, date.day, date.year, date.hour, date.minute,
date.second);
CFShow(mstr);
newLog = CFStringCreateExternalRepresentation(NULL, mstr,
kCFStringEncodingUTF8, '?');
CFRelease(str);
CFRelease(mstr);
CFShow(newLog);
return newLog;
}
这段代码输出类似如下:
Master Log
Master Log
Received at 7/20/1999 19:23:16
<CFData 0x103c0 [0x69bce158]>{length = 43, capacity = 43, bytes =
0x4d6173746572204c6f670a0a52656365 ... 393a32333a31360a}
就像例子显示的,CFString对象的外部描述是不可变的,在储存成CFData对象时不关心它的可变状态。如果你想要改变CFStringCreateFromExternalRepresentation,你需要去创建一个它的可变副本。
除了使用CFStringCreateFromExternalRepresentation函数去创建一个CFString对象,然后去访问这个对象中的字符,你也可以使用CFData函数直接获取字符。列表3(前面的章节中) 展现了怎么样使用CFData函数CFDataGetLength和CFDataGetBytePtr。
data = CFStringCreateExternalRepresentation(NULL, resultString,
kCFStringEncodingMacRoman, '?');
if (data != NULL) {
printf ("%.*s\n\n", (int)CFDataGetLength(data),
CFDataGetBytePtr(data));
CFRelease(data);
}
- 处理字符串的外部表示(Handling External Representations of Strings)CFString
- CF544A:Set of Strings(字符串处理)
- 访问字符串对象的内容(Accessing the Content of String Objects)CFString
- Color representations(色彩的表示)
- CFString去掉string中的字符串(空格)
- 创建和复制字符串(CFString)
- Code Forces B. Strings of Power 字符串处理
- 415. Add Strings (计算由两个字符串表示的数字相加之和)
- LeetCode43——Multiply Strings(两个字符串表示的整数相乘)???
- leetcode_415. Add Strings 字符串表示的大数相加
- 字符串存取(CFString)
- elad的稀疏表示名著《Sparse and Redundant Representations》的总结(一)
- UVa 455 - Periodic Strings(字符串处理)
- POJ: Surprising Strings(map、字符串处理)
- Java源码-判断两个字符串的子字符串是否匹配(Comparing Portions of Strings)
- 操纵可变字符串对象(Manipulating Mutable String Objects)CFString
- Scheme基本概念之External Representations
- POJ3096--Surprising Strings(简单的字符串处理和相同字符串统计)
- 一组简单DP题
- mysql存储过程基本函数
- Java I/0 总体框架图
- 如何优化Html5 App 在IOS/Android 上的性能
- 第六篇 STM复用
- 处理字符串的外部表示(Handling External Representations of Strings)CFString
- mysql 查询缓存相关命令
- 谈谈我做程序员的感想
- Eclipse上GIT插件EGIT使用手册
- 【在UML中表示Java继承和接口】
- js如何对数组进行排序
- 分布式文件系统里的EC和RS编解码的效率问题
- SQL Server 2008 查询主键 索引
- 报考警察还得先整容