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%.很多人年轻人会选择编 ...
随机推荐
- ios 在程序中使用iCloud
注意,这里说的使用icould不是用icloud进行系统备份,那个功能不需要我们写代码,备份到icloud的东西我们也不能操作.我们指的是以下这3种icloud使用方法: 这里有3中使用方法, Key ...
- Effective C++ -----条款32:确定你的public继承塑模出is-a关系
“public继承”意味is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derive class对象也都是一个base class对象 ...
- nyoj202_红黑树_中序遍历
红黑树 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树... 当然,这个是我说的... & ...
- C#文本选中及ContextMenuStrip菜单使用
'文本框选中显示'TextBox1.SelectAll()选择所有文本'textBox1.Text.Insert(start,strInsertText)指定位置添加文本1 Private Sub T ...
- Mysql 基础 高级查询
在西面内容中 car 和 nation 都表示 表名 1.无论 高级查询还是简单查询 都用 select.. from..语句 from 后面 加表名 可以使一张表也可以是 ...
- 【leetcode】Maximum Gap(hard)★
Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...
- 【python】入门学习(五)
字符串: 正索引,从0开始 和 负索引,从-1开始 >>> s = 'apple' >>> s[0] 'a' >>> s[1] 'p' >& ...
- dropdownlist 动态添加
this.DropDownList1.Items.Insert(0,new ListItem("","")); this.Drop ...
- 细谈CSS布局方式
一.CSS布局方式分类 [1].默认文档流方式:以默认的html元素的结构顺序显示 [2].浮动布局方式:通过设置html的float属性显示,值:none不浮动.left对象向左浮动,而后面的内容流 ...
- PCH文件配置路径
"项目" >> Build Settings >> Preflx Header >> $(SRCROOT)/项目名/XXX.pch