Glib学习(8) 动态字节数组 Byte Arrays
来源:互联网 发布:兄弟连mysql视频教程 编辑:程序博客网 时间:2024/06/01 16:12
先上说明文档网址:http://web.mit.edu/barnowl/share/gtk-doc/html/glib/glib-Byte-Arrays.html
动态字节数组和前两个动态数组一样,只不过是用来存储字节数据的,这个数组的功能很像strings,和他的区别就是这个字节数组有处理二进制数据的能力,strings一般用来处理ascii字符,所以字节数组并不会以0作为结尾,这个特点在运行例子程序中也会看到,其他的就没有什么了,这个数组的用法与前两种几乎没有区别,所以我在例子代码中不做注释性解释。
结构体定义:
GByteArray
typedef struct { guint8 *data; guint len;} GByteArray;
功能函数:
Synopsis
#include <glib.h> GByteArray;GByteArray* g_byte_array_new (void);GByteArray* g_byte_array_sized_new (guint reserved_size);GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len);GByteArray* g_byte_array_prepend (GByteArray *array, const guint8 *data, guint len);GByteArray* g_byte_array_remove_index (GByteArray *array, guint index_);GByteArray* g_byte_array_remove_index_fast (GByteArray *array, guint index_);GByteArray* g_byte_array_remove_range (GByteArray *array, guint index_, guint length);void g_byte_array_sort (GByteArray *array, GCompareFunc compare_func);void g_byte_array_sort_with_data (GByteArray *array, GCompareDataFunc compare_func, gpointer user_data);GByteArray* g_byte_array_set_size (GByteArray *array, guint length);guint8* g_byte_array_free (GByteArray *array, gboolean free_segment);
例子代码:
#include <glib.h>static gintsort(gconstpointer p1, gconstpointer p2){ char a, b; a = *(char *)(p1); b = *(char *)(p2); return (a > b ? +1 : a == b ? 0 : -1);}static gintsort_r(gconstpointer p1, gconstpointer p2, gpointer user_data){ char a, b; a = *(char *)(p1); b = *(char *)(p2); return (a < b ? +1 : a == b ? 0 : -1);}static voidtest_array(void){ GByteArray *gbarray = NULL; gint i; gbarray = g_byte_array_new(); g_byte_array_append (gbarray, (guint8*) "abcde12345", 10); g_printf("There should be '%d' items now.\t\tResult: %d.\n", 10, gbarray->len); g_printf("All of items:\n"); g_printf("%s\n", gbarray->data); g_printf("All of items[after append]: len:%d\n", gbarray->len); g_byte_array_append(gbarray,(guint8*) "append!", 7); g_printf("%s\n", gbarray->data); g_printf("All of items[after prepend]: len:%d\n", gbarray->len); g_byte_array_prepend(gbarray, (guint8*)"prepend!", 8); g_printf("%s\n", gbarray->data); g_byte_array_remove_index(gbarray, 1); g_printf("All of items[exclude the second item]: len:%d\n", gbarray->len); g_printf("%s\n", gbarray->data); g_byte_array_remove_index_fast(gbarray, 1); g_printf("All of items[exclude the second item]: len:%d\n", gbarray->len); g_printf("%s\n", gbarray->data); g_byte_array_remove_range(gbarray, 2, 2); g_printf("All of items[after remove 2 items from the third item]: len:%d\n", gbarray->len); g_printf("%s\n", gbarray->data); g_byte_array_sort(gbarray, sort); g_printf("All of items[sorted]: len:%d\n", gbarray->len); g_printf("%s\n", gbarray->data); g_byte_array_sort_with_data(gbarray, sort_r, NULL); g_printf("All of items[sorted reversed]: len:%d\n", gbarray->len); g_printf("%s\n", gbarray->data); g_byte_array_free(gbarray, TRUE);}intmain(void){ g_printf("BEGIN:\n************************************************************\n"); test_array(); g_printf("\n************************************************************\nDONE\n"); return 0;}
运行结果:
linux@ubuntu:~/16021/glibdemo$ gcc Byte_Arrays.c -o Byte_Arrays -lglib-2.0linux@ubuntu:~/16021/glibdemo$ ./Byte_Arrays BEGIN:************************************************************There should be '10' items now.Result: 10.All of items:abcde12345All of items[after append]: len:10abcde12345append!All of items[after prepend]: len:17prepend!abcde12345append!�^�p�^�All of items[exclude the second item]: len:24pepend!abcde12345append!!�^�p�^�All of items[exclude the second item]: len:23p!pend!abcde12345append!!�^�p�^�All of items[after remove 2 items from the third item]: len:21p!nd!abcde12345appendnd!!�^�p�^�All of items[sorted]: len:21!!12345aabcdddeennpppnd!!�^�p�^�All of items[sorted reversed]: len:21pppnneedddcbaa54321!!nd!!�^�p�^�************************************************************DONElinux@ubuntu:~/16021/glibdemo$
从上面的运行结果可以看出有些情况会出现乱码,这是因为printf函数通过检测‘\0’作为字符串结束,如果结尾没有0就会继续打印,而且可以看出即使删除了数据并将后面数据向前移动后最后面的数据依然存在,只是结构体的len改变了。
0 0
- Glib学习(8) 动态字节数组 Byte Arrays
- Glib学习(6) 动态数组 Arrays
- Glib学习(7) 动态指针数组 Pointer Arrays
- 合并byte[]字节数组
- 获取文件字节数组byte[]
- 整形转字节byte数组
- InputStream 转为byte[]字节数组
- JAVA开发中字节转换问题(byte数组byte数组、合并、转换16进制)
- java学习(3) Arrays 管理数组
- 动态数组详解Dynamic Arrays
- 图片转为Byte字节数组 字节数组生成图片
- C# byte字节数组比较方法分析
- Bitmap转灰度字节数组byte[]
- C# 文件转字节数组 byte[]
- android byte字节数组转换十六进制字符串
- Java中byte[]比较----字节数组比较
- byte字节数组 转换成double类型
- C#用byte[]字节数组获取C中byte*指针
- vmware装64位ubuntu时出现cpu问题
- 找不到#include "stdafx.h"解决办法
- 讯飞语音命令词识别的SDK配置与运用
- Handler消息机制分析
- Java List集合知多少?
- Glib学习(8) 动态字节数组 Byte Arrays
- RecyclerView基本使用方式
- HDU 2135 Rolling table(方阵旋转+找规律)
- 基于树莓派raspberry: 移植 2.4寸TFT显示屏以及源码分析
- Autolayout第三方库Masonry的入门与实践
- dota2 刚被控制台自动切假腿
- 深入浅出 RPC - 浅出篇
- 21_服务器上的 XML
- Shell - 15