精华内容
下载资源
问答
  • 该程序将 BMP/TIFF/JPG/PNG 文件转换为嵌入的 C/C++ 字节数组。 当您想在显示器上显示单色图像时,这非常有用。 它在数据数组生成之前将您的图像转换为单色。 源图像中较暗的颜色将产生“开”像素,而较亮的颜色将...
  • 在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和VC6.0等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接...
  • C++编程思想,在介绍数据封装给了一个CStash的例子,大概的思想是,建立一个struct,来管理一个动态增长的数组。这个数组可以接受任何类型的基本数据类型。...实际上对应于标准的字节数组。对于这个转化过

    C++编程思想,在介绍数据封装给了一个CStash的例子,大概的思想是,建立一个struct,来管理一个动态增长的数组。这个数组可以接受任何类型的基本数据类型。包括示例中的int和char,一个能保存多种数据类型的底层数据类型,当然是最小的类型也就是sizeof运算符返回为1的数据类型,综合考虑,原书中给出的unsigned char作为最基本的数据类型。实际上对应于标准的字节数组。对于这个转化过程,我写了一些代码验证了一些问题。顺便复习一下,计算机体系结构中的字节序的问题。

         以下是我的CStash实现代码:

     

    #include<iostream>
    #include<cstdlib>
    using namespace std;
    const int increment = 100;
    struct CStash
    {
    	int size;//当前元素所占字节数
    	int quantity;//当前容积(即包含未占用的和已占用的)
    	int next;//当前元素个数(因为坐标从0开始,所以next实际上等于当前元素个数,又是下一个可以存放的空白位置)
    	unsigned char *buffer;//字节数组
    
    	//初始化
    	void init(int sz)
    	{
    		size = sz;
    		quantity = 0;
    		next = 0;
    		buffer = 0;
    		cout << "Init......over!" <<endl;
    	}
    	//释放内存
    	void cleanup()
    	{
    		if(buffer != 0)
    			delete []buffer;
    		cout << "Cleanup......over!" <<endl;
    	}
    
    	//添加元素
    	int add(const void * element)
    	{
    		//当前元素数量超过容积,则动态增长
    		if(next >= quantity)
    			flate(increment);
    		//转换为字节数组,因为指针的关系,首地址是不变的,数据内容并不会改变
    		unsigned char *cur = (unsigned char *)element;
    		//当前字节数(元素个数 * 每个元素的字节数)
    		int startbytes = next * size;//从starybytes开始 都可以存放新的数据
    		for(int i=0;i<size;i++)//因为一个元素是size个字节,复制size个字节到新空间
    		{
    			buffer[startbytes + i] = cur[i];
    		}
    		next++;//元素个数加1
    		return next - 1;//返回当前最后一个元素,其实按照标准模版库的一般用法给next返回,也没啥问题
    	}
    
    	//获取当前位置的原书
    	void* fetch(int index)
    	{
    		if(index >= next) return 0;
    		//用引用返回,而不是局部指针
    		return &(buffer[index * size]);
    	}
    
    	int count()
    	{
    		//当前元素个数
    		return next;
    	}
    
    	void flate(int incre)
    	{
    		int newQuantity = quantity + incre;//新增长后元素数量
    		int newSize = newQuantity * size;//新容器整个字节数
    		int oldSize = quantity * size;//旧容器中字节数
    		unsigned char *tmp = new unsigned char[newSize];//重新分配内存
    		//复制旧元素
    		for(int i=0;i<oldSize;i++)
    		{
    			tmp[i] = buffer[i];
    		}
    		delete []buffer;//释放旧元素内存
    		buffer = tmp;//赋值新元素地址
    		quantity = newQuantity;//修改容器容量
    	}
    };
    int main()
    {
    	//验证unsigned char作为字节数组的可行性,刚好就是1字节
    	cout << sizeof(unsigned char) <<endl;
    	CStash s;
    	//内存初始化
    	s.init(sizeof(int));
    	for(int i=0;i<100;i++)
    	{
    		s.add(&i);//添加元素
    	}
    	for(int i=0;i<s.count();i++)
    	{
    		cout << i << " : "<<*((int *)s.fetch(i))<<endl;//输出元素
    	}
    	cout << endl;
        //内存释放区域
    	s.cleanup();
    	//暂停
    	system("pause");
    }

    现在分析上面代码值得学习的地方,首先为什么是无符号的字符数组,因为有符号的字节数组,因为符号的原因,会产生非预期的效果。其次添加元素和查找元素参数都是指针,指针变化的只是指针能访问数据类型的限制,而不是数据本身,所以这种转换并没有破坏数据本身。而且void * 使得程序能处理更通用的数据类型。还有这个动态增长的思想,其实标准库中有很多地方都有这种思想存在,这里的代码给人更直观的学习机会!

    为了验证一个int(我的机器上32位环境下4字节)转换为unsigned char过程中发生了什么,这就涉及到了一点计算机体系结构的知识,也就是字节序的问题了。

    验证程序如下:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    
    using namespace std;
    void Convert(void *element,int size)
    {
    	//转换为字节数组指针
    	unsigned char *tmp = (unsigned char *)element;
    	for(int i=0;i<size;i++)
    	{
    		printf("%d ",(int)tmp[i]);//输出每个字节的内容
    	}
    	printf("\n");
    }
    
    int main()
    {
    	int a = 10;//可以设置10 1024等验证结论
    	Convert(&a,sizeof(a));
    	system("pause");
    	return 0;
    }

    上面的程序将int * 转化为 unsigned char *之后查看四个字节的内容,得到了非常有意思的结果


    10-----10 0 0 0
    1024--0 4 0 0
    看到没,0 4 0 0和10 0 0 0都说明是从低位开始放置数据的,低位数据是放在小地址上面的。按照维基百科(关键字:字节序)的说法,X86体系的计算机是小端序的,也就是从低字节开始增长。 为什么是0 4 0 0应为 2^10 = 1024 (二进制100 0000 0000) 十进制为0 0 4 0 反过来就是 0 4 0 0。小端序就是说地址是从低位开始增长,而且数据的低位放在低地址,高位放在高地址。可以运行代码自行验证结论。也可以在维基百科里面看字节序的内容。


    在JAVA里面接触字节流是最多的,这也是我第一次在C++里面看到用字节来转化,看的是很神奇,顺便也学习了计算机的存储方式。




    展开全文
  • http://bbs.csdn.net/topics/360132089 BYTEdata[4]={0x00,0x00,0xe6,0x00};//第一句UINTa11=*(UINT*)data;//第二句al1表示成0x0000e600al1=data[0]<<24+data[1]<<16+data[2]<...8+data[...

    http://bbs.csdn.net/topics/360132089 

     

    BYTE data[4]={0x00,0x00,0xe6,0x00};//第一句
    UINT a11=*(UINT*)data;//第二句


    al1表示成0x0000e600
    al1 = data[0]<<24 + data[1]<<16 + data[2]<<8 + data[3];

    al1表示成0x00e60000
    al1 = data[3]<<24 + data[2]<<16 + data[1]<<8 + data[0];

    转载于:https://www.cnblogs.com/Billy-rao/p/3914369.html

    展开全文
  • C/C++输出字节数组

    2021-07-08 15:40:30
    C/C++输出字节数组C/C++输出字节数组1. C2. C++3.完整代码4.输出结果 C/C++输出字节数组 作为一个c++初学者,输出一个字节数组的方法让我找了半天,,,, 1. C 因为这里的 byte 我前面定义为 unsigned char ,即为8...

    C/C++输出字节数组

    作为一个c++初学者,输出一个字节数组的方法让我找了半天,,,,
    以下对比了printf和cout的输出

    1. C

    因为这里的 byte 我前面定义为 unsigned char ,即为8位,一个字节。
    所以 buffer[] 为一个字符数组。
    c直接使用printf 输出即可,具体几进制直接换%后的字母即可,又快又省事!
    再看c++吧,,

    2. C++

    感觉C++的输出好麻烦,,
    首先按照几进制输出得在前面写出来一个 cout << hex <<(十六进制)
    然后因为hex 只对整形数据起作用,所以还得强制类型转换,,,

    3.完整代码

    #include <iostream>
    
    typedef unsigned char byte;
    using namespace std;
    
     
    int main ()
    {
      /*定义的字节数组*/
      byte buffer[]= {0x02,0xF4};
    
      /*传统c语言printf输出*/
      printf("传统c语言printf输出:\n");
      printf("c十进制输出:%d\n", buffer[0]);
      printf("c十进制输出:%d\n", buffer[1]);
    
      printf("c十六进制输出:%X\n", buffer[0]);
      printf("c十六进制输出:%X\n", buffer[1]);
    
      printf("\n");
    
      /*c++的cout输出*/
      cout << "c++的cout输出:" << endl;
      cout << "c++十进制输出:" << dec << int(buffer[0]) << endl;
      cout << "c++十进制输出:" << dec << int(buffer[1]) << endl;
    
      cout << "c++十进制输出:" << hex << int(buffer[0]) << endl;
      cout << "c++十进制输出:" << hex << int(buffer[1]) << endl;
    
      return 0;
    }
    

    4.输出结果

    在这里插入图片描述

    展开全文
  • C++ 6.0字节数组使用stl或者vector怎么实现过滤和添加浮点数呢?
  • c++实现整型和字节数组间的转化

    千次阅读 2019-01-09 14:54:40
    在网络传输中经常需要将整型数字转换成字节数组,然后将字节数组发送到客户端,在c++,int是4个字节,long是8个字节。废话不说,代码如下(byte类型是uchar): int32_t bytesto_int4(byte *bytes) { //turn bytes...

    整型转换到字节数组

    在网络传输中经常需要将整型数字转换成字节数组,然后将字节数组发送到客户端,在c++,int是4个字节,long是8个字节。废话不说,代码如下(byte类型是uchar):
    int32_t bytesto_int4(byte *bytes)
    {
        //turn bytes array to integer
        int32_t num = bytes[0] & 0xFF;
        num |= ((bytes[1] << 8) & 0xFF00);
        num |= ((bytes[2] << 16) & 0xFF0000);
        num |= ((bytes[3] << 24) & 0xFF000000);
        return num;
    }
    

    字节数组到整型

    void int4to_bytes(int32_t num, byte *bytes /*in array size must be 4*/)
    {
        //turn integer to bytes array
        bytes[0] = num;
        bytes[1] = num >> 8;
        bytes[2] = num >> 16;
        bytes[3] = num >> 24;
    }
    

    扩展(长整型到字节数组)

    void int8to_bytes(int64_t num, byte *bytes /*in array size must be 8*/)
    {
        bytes[0] = num;
        bytes[1] = num >> 8;
        bytes[2] = num >> 16;
        bytes[3] = num >> 24;
        bytes[4] = num >> 32;
        bytes[5] = num >> 40;
        bytes[6] = num >> 48;
        bytes[7] = num >> 56;
    }
    

    字节数组到长整型

    int64_t bytesto_int8(byte *bytes /*size must be 8*/)
    {
        //turn bytes array to integer
        int64_t num = bytes[0] & 0xFF;
        num |= (((int64_t)bytes[1] << 8) & 0xFF00);
        num |= (((int64_t)bytes[2] << 16) & 0xFF0000);
        num |= (((int64_t)bytes[3] << 24) & 0xFF000000);
        num |= (((int64_t)bytes[4] << 32) & 0xFF00000000);
        num |= (((int64_t)bytes[5] << 40) & 0xFF0000000000);
        num |= (((int64_t)bytes[6] << 48) & 0xFF000000000000);
        num |= (((int64_t)bytes[7] << 56) & 0xFF00000000000000);
        return num;
    }
    
    展开全文
  • /// 把int32类型的数据转存到4个字节的byte数组中 /// /// int32类型的数据 /// 4个字节大小的byte数组 public static bool ConvertIntToByteArray(Int32 m, ref byte[] arry) { if (arry == null) return fals
  • 无符号字节数组转16进制字符串 std::string bytesToHexString(const BYTE* bytes,const int length) { if (bytes == NULL) { return ""; } std::string buff; const int len = length; for (int j = 0; j &...
  • 本文较为详细的分析了关于理解C++指针数组数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。 一、关于数组名 假设有数组: int a[3] = {1, 2, 3} 1.数组...
  • C++ byte数组/char数组 截取部分字节

    千次阅读 2020-12-01 19:13:38
    VS-C++ 系列:所有相关C++文章链接. VS-C# 系列:所有相关C#文章链接. bat 系列:所有相关bat文章链接. Keil 系列:所有相关文章链接 所有内容均以最小系统调试成功;逐步提供低分源码工程下载! 保证每行代码都...
  • C++: ---------------------------------- extern "C" __declspec(dllexport) int index(char* a); int __declspec(dllexport) ...这样字节数组传递不过去,请问C#用的是byte[],C++那边应该用什么类型来接收??
  • 将位图转换为 C/C++ 字节数组的实用程序。 安装 $ pip install img2h 用法 $ img2h --help Usage: img2h [OPTIONS] IMAGE_FILE Options: --threshold INTEGER Pixels with brightness lower that this will be ...
  • byte[] BytePara = 为从C++里取出的字节数组; InfoDataStruct 为结构,循环将Byte数组里的内容转换为结构 InfoDataStruct* p = (InfoDataStruct*)(BytePara+ (i * 55)); InfoDataStruct dataStruct= ...
  • Java 对象与字节数组相互转换

    千次阅读 2017-11-10 18:17:41
    Java利用反射实现的通用对象与字节数组相互转换方法 1、对象转字节数组 2、字节数组转对象
  • C++ Array 数组

    千次阅读 2019-04-28 17:20:01
    C++ Array 数组,是一个包含了一些列变量的变量,可以视为一个集合。 例如: int main() { int example[5]; example[0] = 2; } 定义一个包含五个整型变量的数组 example, 即在内存空间中开辟 20 bytes (int 为...
  • Linux环境下,使用g++编译,发现C++局部数组变量地址间隔是16字节的倍数,为什么呢?有什么办法可以控制间隔的大小。 char str1[] = "abcd"; char str2[2]; printf("address_str1= %p\n",str1); printf(...
  • c++数组

    2016-08-16 16:33:00
    c++数组 数组的定义 数组用于表示一组数值,例如: char arr[5]; 其中,arr称为"数组变量",简称"数组"。它表示5个char型数据,我们把每一个数据称为一个"元素"。 数组...
  • 就拿 0x34567891来说,从高位到低位的字节依次是0x34、0x56、0x78、0x91。假如把他分别放到byte[] tem_byte=new byte[4]中。 对于小端模式:tem_byte[0]=0x91、tem_byte[1]=0x78、tem_byte[2]=0x56、tem_byte[3]=0x...
  • C++柔性数组

    2020-01-16 20:15:21
    柔性数组我认为就是动态数组,在C++中,定义柔性数组需要两个步骤: 1.定义一个结构体 2.在结构体最后一个元素定义一个没有长度的数组 下面的b就是一个柔性数组,如果把b放到a的上面是会报错的 struct MyStruct { ...
  • char字节数组类型转QString里边要特别注意的是,数组中含有00时,直接用QString的方法toLatin1()转换会出问题,遇到0就认为结束。 下面是字节数组转QString类型的列子 //字节数组转16进制字符串,用于16进制显示 ...
  • 本文较为详细的分析了关于理解C++指针数组数组指针,数组名,二维数组的一些技巧。是比较重要的概念,相信对于大家的C++程序设计有一定的帮助作用。 一、关于数组名 假设有数组: ? 1 ...
  • 最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换;由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一点非常重要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,378
精华内容 63,351
关键字:

c++字节数组

c++ 订阅