ASCIIHexDecode,RunLengthDecode
public static byte[] ASCIIHexDecode(byte[] data)
{
MemoryStream outResult = new MemoryStream();
bool first = true;
int n1 = ;
for (int k = ; k < data.Length; ++k)
{
int ch = data[k] & 0xff;
if (ch == '>')
break;
if (isWhitespace(ch))
continue;
int n = getHex(ch);
if (n == -)
throw new Exception("Illegal character in ASCIIHexDecode.");
if (first)
n1 = n;
else outResult.WriteByte((byte)( ((n1 << ) + n)));
first = !first;
}
if (!first)
outResult.WriteByte((byte)((n1 << )));
return outResult.ToArray();
} public static bool isWhitespace(int ch)
{
return (ch == || ch == || ch == || ch == || ch == || ch == );
} public static int getHex(int v)
{
if (v >= '' && v <= '')
return v - '';
if (v >= 'A' && v <= 'F')
return v - 'A' + ;
if (v >= 'a' && v <= 'f')
return v - 'a' + ;
return -;
}
public static byte[] RunLengthDecode(byte[] data)
{ // allocate the output buffer
MemoryStream outResult = new MemoryStream();
int dupAmount = -;
for (int i = ; i < data.Length; i++)
{
if ((dupAmount = (int)data[i]) != - && dupAmount != )
{
if (dupAmount <= )
{
int amountToCopy = dupAmount + ;
for (int j = ; j < amountToCopy; j++)
{
if (++i < data.Length)
{
outResult.WriteByte((byte)( data[i]));
}
else
{
break;
}
}
}
else
{
if (++i < data.Length)
{
byte dupByte = data[i];
for (int j = ; j < - (int)(dupAmount & 0xFF); j++)
{
outResult.WriteByte((byte)(dupByte));
}
}
}
}
else
{
break;
}
}
return outResult.ToArray();
}
ASCIIHexDecode,RunLengthDecode的更多相关文章
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- MPlayer
名称 mplayer − 电影播放器 mencoder − 电影编解码器 概要 mplayer [选项] [文件|URL|播放列表|−] mplayer [选项] 文件1 [指定选项] [文件 ...
- python 爬取腾讯微博并生成词云
本文以延参法师的腾讯微博为例进行爬取并分析 ,话不多说 直接附上源代码.其中有比较详细的注释. 需要用到的包有 BeautifulSoup WordCloud jieba # coding:utf-8 ...
- 面经 cisco
1. 优先级反转问题及解决方法 (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优 ...
- linux驱动(续)
网络通信 --> IO多路复用之select.poll.epoll详解 IO多路复用之select.poll.epoll详解 目前支持I/O多路复用的系统调用有 select,psel ...
- HttpServletRequest对象(一)
javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- 先说IEnumerable,我们每天用的foreach你真的懂它吗?
我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
随机推荐
- 堆栈指针 ---delete 使用
对拥有堆中一个有效对象的地址的指针进行删除操作的结果,是将这个堆内存的状态从“使用中” 变为“可用”(此时的可用就是指可以调用内存)释放了,可以再次覆盖此处;; 对指针内存进行删除操作后,指针 ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- Android 的 AlarmManager 和 wakeLock联合使用
http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...
- 安装m2crypto报错swig error : Unrecognized option -builtin
M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具.而自从 M2Crypto 升级到版本 ...
- linux学习之一些琐碎知识点
一.python 问:django中project和app之间到底有什么不同? 答:他们的区别就是一个是配置,另一个是代码. 一个project包含很多个django app以及对它们的配置.技术上, ...
- mybatis新增数据后获取自增主键
mybatis对应mysql <insert id="insert" parameterType="com.timestech.wsgk.web.model.Sys ...
- 【编程题目】输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数, 使其和等于 m ... ★
第 21 题(数组)2010 年中兴面试题编程求解:输入两个整数 n 和 m,从数列 1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来. 我的思路: 从小 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- php Internal Server Error
Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...
- October 12th 2016 Week 42nd Wednesday
Passion is momentary; love is enduring. 激情短暂,真爱长久. What is love? And what is real love? We are alway ...