编码折线算法格式还提供了编码无符号值的步骤,如下:
下面说明了编码无符号值的步骤:
取初始无符号值:
174
将十进位值转换为二进制值:
10101110
将该二进制值分为 5 位一组的块(从右手边开始):
101 01110
将这些 5 位一组的块倒序放置:
01110 101
如果后面还有一个位块,则将每个值与 0x20 进行或操作 (OR):
101110 00101
将每个值转换为十进制值:
46 5
将每个值加上 63:
109 68
将每个值转换为其 ASCII 对应值:
mD
仔细看了一下,这部分的编码和有符号编码从第三步开始是一样的。于是调整自己的代码,如下:
#include "stdafx.h"
#include "string"
#include "iostream"
using namespace std;
//四舍五入取整函数
int interger(double x)
{
int y;
if(x<0)
y=int(x-0.5);
else if(x>=0)
y=int(x+0.5);
return y;
}
//无符号数编码
void encodeNumber(unsigned int sgn_num)
{
string result="";
//将该二进制值分为5位一组的块
while(sgn_num>=0x20)
{
int x;
x=sgn_num&0x1f;
// cout<<x<<endl;
//进行异或加上63
x=x|0x20;
// cout<<x<<" ";
x=x+63;
// cout<<x<<" ";
//change(x);
//cout<<char(x)<<endl;
result+=char(x);
sgn_num>>=5;
}
/*sgn_num=sgn_num&0x1f;
sgn_num=sgn_num|0x20;*/
// cout<<sgn_num<<" ";
result+=char(sgn_num+63);
cout<<result;
}
//有符号值编码
void encodeSignedNumber(int num)
{
int sgn_num;
//变换二进制值,左移,地位补0
sgn_num=num<<1;
// cout<<sgn_num<<endl;
if(num<0)
{
sgn_num=~(sgn_num);//对负数求反
}
encodeNumber(sgn_num);
}
int _tmain(int argc, _TCHAR* argv[])
{
//有符号数,设置成double型,双精度浮点型,10位有效数字,float是单精度浮点型,只有6位有效数字
double col=-179.9832104;
int num;
num=interger(col*100000);
encodeSignedNumber(num);
unsigned int x=174;
encodeNumber(x);
//system函数是用来执行一条dos命令或运行一个外部程序。 pause是暂停,并等待用户按键
system("pause");
return 0;
}
分享到:
相关推荐
在C++标准库中,`Map`被实现为`std::map`,但在这个场景中,我们讨论的是一个用户自定义的简易`Map`实现,名为"MyMap",这是在Visual Studio 2013环境下编写的。 自定义`Map`的主要目的是为了学习和理解数据结构的...
这里我们将深入探讨香农编码的原理及其C++实现中的可能问题。 首先,理解香农编码的基本步骤: 1. **统计字符频率**:对输入的文本或数据流进行分析,统计每个字符出现的次数,得到字符频率分布。 2. **排序字符**...
在C++中实现霍夫曼编码,需要理解以下几个关键知识点: 1. 频率统计:首先,我们需要对输入的文本进行字符频率统计。C++中可以使用`std::map`或`std::unordered_map`来存储每个字符及其出现次数。 ```cpp std::map...
在C++中实现Huffman编码需要理解以下几个关键概念: 1. **字符频率统计**:首先,我们需要统计输入文本中各个字符出现的频率。这通常通过遍历整个文本并维护一个哈希表(如`std::unordered_map`)来完成,哈希表的...
本文将通过一个具体的示例来详细介绍如何使用Google Maps API实现折线的绘制,并对代码进行深入剖析。 #### 二、示例概述 本示例主要实现了以下功能: 1. 在地图上动态创建标记(Marker),用户可以通过双击地图...
标题 "C++调用GOOGLEMAP代码" 涉及到的是在C++程序中集成和使用Google Maps API的技术。Google Maps API是一个强大的工具,允许开发者在他们的应用程序中嵌入地图、路线规划、地理编码(地址转经纬度)等功能。在C++...
在C++中实现哈夫曼编码涉及几个关键步骤,包括构建哈夫曼树、生成哈夫曼编码以及编码和解码过程。 首先,我们需要创建一个`HuffmanNode`结构体或类,表示哈夫曼树中的节点。这个节点通常包含两个子节点(左子节点和...
`map`的数据结构通常实现为红黑树,提供了O(log n)的时间复杂度进行插入、查找和删除操作。下面我们将详细探讨`map`的基本用法和嵌套用法。 ### 一、map基本用法 1. **头文件** 使用`<map>`头文件来包含`map`...
哈弗曼编码是一种高效的数据压缩方法,由美国学者大卫...通过以上步骤,我们可以理解哈弗曼编码的核心原理和C++实现的细节。在实际应用中,哈弗曼编码常被用于文本压缩、图像压缩等领域,以提高数据存储和传输的效率。
在C++中实现Huffman编码涉及到了数据结构、算法以及文件操作等多个知识点。 首先,我们要理解Huffman编码的基本原理。它通过以下步骤工作: 1. **统计字符频率**:对输入文本中的每个字符出现的次数进行统计,形成...
本教程将聚焦于如何在Android应用中使用Google Maps API来绘制折线标记路径。 首先,你需要在你的Android项目中添加Google Play Services库,这是使用Google Maps API的前提。在`build.gradle`文件中,添加以下依赖...
用c++实现利用Google地图API实现的定位查找,可以和IP数据库一起做定位查找程序,很好用。也可以用来调用任意网页里的Javascript函数。 --忘了地图文件了,不好意思,是用GoogleAPI写的Map.html文件。单独上传,供...
`map`内部实现为红黑树,这保证了插入、删除和查找操作的时间复杂度为O(log n)。在C++中,`map`的定义位于`<map>`头文件中。 ### 基本概念 1. 键(key):每个元素都有一个键,用于唯一标识该元素。 2. 值(value...
C++实现哈夫曼树和哈夫曼编码,通常包括以下步骤: 1. 定义节点类(HuffmanNode),包含字符、频率以及左右子节点等属性。 2. 创建优先队列,用于存储节点并按权值排序。 3. 实现哈夫曼树的构建函数,利用优先队列...
map.h C++ 头文件下载 C++17 标准库文件 unordered_map map
在C++中实现这些功能,可以使用STL中的`priority_queue`作为最小堆,`map`或`unordered_map`存储字符频率和哈弗曼编码。程序应该包含读取输入数据、构建哈弗曼树、生成编码、计算相关参数和验证克拉夫特不等式等功能...
以上就是Shannon编码算法的基本原理和C++实现方式。理解并掌握这一算法有助于提升在信息处理、数据压缩和通信领域的能力。在实际应用中,Shannon编码常常与其他数据压缩技术结合,如LZ77、LZ78等,以达到更好的压缩...
在这个特定的项目中,标题提到“c++实现的简易map”,这意味着开发者自己动手实现了一个类似标准库`<map>`的数据结构。描述中指出,这个简易`Map`是在Visual Studio 2019环境下编写的,这通常意味着它是用C++17或更...
### 哈夫曼编码的原理及C++实现 #### 一、编码原理 哈夫曼编码(Huffman Coding)是一种高效的数据压缩方法,通过基于数据中各字符出现的频率来构建一种特殊的二叉树——哈夫曼树,进而根据这棵树为每个字符分配一...
4. **C++实现细节**: - `main.cpp`是程序的主入口,负责调用哈弗曼树的构建和编码/解码功能。 - `huffman.h`可能包含了哈弗曼树的定义以及相关的函数声明。在这个头文件中,你可以看到关于`HuffmanNode`类的定义...