社区
C语言
帖子详情
如何存储包含null的二进制数据
haoahui
2010-04-02 03:17:37
// 开辟一块内存
BYTE *tmp=NULL, *tmp1;
tmp = malloc( 560);
// 给上述内存块赋值(二进制),存在其中某些内存空间不被赋值(null)的情况,且个数与位置都不固定
某函数(tmp);
现在要将tmp内存中二进制数据(包括其中的null)保存到数据库(sqlite3)中, 如何处理
开发环境:
OS:linux
语言:C语言
硬件:OMP3530
在线等您回答
...全文
308
19
打赏
收藏
如何存储包含null的二进制数据
// 开辟一块内存 BYTE *tmp=NULL, *tmp1; tmp = malloc( 560); // 给上述内存块赋值(二进制),存在其中某些内存空间不被赋值(null)的情况,且个数与位置都不固定 某函数(tmp); 现在要将tmp内存中二进制数据(包括其中的null)保存到数据库(sqlite3)中, 如何处理 开发环境: OS:linux 语言:C语言 硬件:OMP3530 在线等您回答
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
haoahui
2010-04-02
打赏
举报
回复
[Quote=引用 16 楼 vivo01 的回复:]
你要保存的值除了null以外如果都是正数或0的话,那你可以将null的值用一个宏替换,比如一个负值
#define NULL -1
读取的时候如果是-1就判断为空值
[/Quote]这种办法行不通 -1就是255啊。。。
comeon010
2010-04-02
打赏
举报
回复
把所有的数据进行一个异或存入,读出后再异或回来。
a^0xcc
haoahui
2010-04-02
打赏
举报
回复
[Quote=引用 16 楼 vivo01 的回复:]
你要保存的值除了null以外如果都是正数或0的话,那你可以将null的值用一个宏替换,比如一个负值
#define NULL -1
读取的时候如果是-1就判断为空值
[/Quote]我试试
亦枫Leonlew
2010-04-02
打赏
举报
回复
你要保存的值除了null以外如果都是正数或0的话,那你可以将null的值用一个宏替换,比如一个负值
#define NULL -1
读取的时候如果是-1就判断为空值
haoahui
2010-04-02
打赏
举报
回复
[Quote=引用 9 楼 toborac 的回复:]
不要用 strxxx 那一组函数 用memxxx那一组
[/Quote]我没用strXXX 都是指定的长度
haoahui
2010-04-02
打赏
举报
回复
[Quote=引用 13 楼 loaden 的回复:]
比如:
BYTE *tmp=NULL, *tmp1;
tmp = malloc( 560);
你申请的内存大小是560,那么,刚才的那个长度也指定:560 就可以将数据都写进去了。
[/Quote]sqlite3_bind_blob(stat, 1, fvModule, 560, NULL);这是我的代码 没用的。。。
「已注销」
2010-04-02
打赏
举报
回复
比如:
BYTE *tmp=NULL, *tmp1;
tmp = malloc( 560);
你申请的内存大小是560,那么,刚才的那个长度也指定:560 就可以将数据都写进去了。
「已注销」
2010-04-02
打赏
举报
回复
sqlite3_bind_blob( stat, 1, buffer,
strlen(buffer)
, NULL );
红色处不可用strlen,因为遇到null就截断了。
要自己指定一个长度。
haoahui
2010-04-02
打赏
举报
回复
[Quote=引用 6 楼 cattycat 的回复:]
数据库中有个字段能保存二进制信息,你BYTE的直接写进数据库就行,只要你记得长度就行。这个字段不能是char类型。
你说的null值就是0吧。
[/Quote]读到null就会停止了。。。
haoahui
2010-04-02
打赏
举报
回复
谢谢各位以上的回答 我数据库里字段的类型是BLOB 也是用sqlite3_bind_blob来做的 但null后面的数据不会被存入数据库 怎么办!!!
toborac
2010-04-02
打赏
举报
回复
不要用 strxxx 那一组函数 用memxxx那一组
wesleyluo
2010-04-02
打赏
举报
回复
[Quote=引用 6 楼 cattycat 的回复:]
数据库中有个字段能保存二进制信息,你BYTE的直接写进数据库就行,只要你记得长度就行。这个字段不能是char类型。
你说的null值就是0吧。
[/Quote]
同意,你不用管内存中是什么数据,只要你知道长度 N,然后往文件中写入内存的N个空间就行咯。
「已注销」
2010-04-02
打赏
举报
回复
http://www.xue5.com/itedu/200707/118810.html
写二进制数据
sqlite3 * db;
int result;
char **errmsg =NULL;
result = sqlite3_open("test.db", &db );
if( result != SQLITE_OK )
{ return -1;}
result = sqlite3_exec( db,"create table tb( ID integer, content blob)", NULL, NULL, errmsg);
if(result != SQLITE_OK){printf("erro");}
char *buffer;//要写的二进内容,也可以从文件读出来
buffer=new char[1024*1024];
for(int i=0;i<1024*1024;i++)buffer[i]='a';
sqlite3_stmt *stat;//写二进制数据时要用的结构
sqlite3_prepare( db, "insert into tb( ID, content) values( 10, ? )", -1, &stat, 0 );//准备插入数据
sqlite3_bind_blob( stat, 1, buffer, strlen(buffer), NULL ); //把内容和字段绑定
result=sqlite3_step( stat );//执行
sqlite3_finalize( stat );释放内存
sqlite3_close( db );
cattycat
2010-04-02
打赏
举报
回复
数据库中有个字段能保存二进制信息,你BYTE的直接写进数据库就行,只要你记得长度就行。这个字段不能是char类型。
你说的null值就是0吧。
haoahui
2010-04-02
打赏
举报
回复
大家帮帮我 头痛死了 明天不想加班啊
haoahui
2010-04-02
打赏
举报
回复
这样,
比如有个相机,我写了个驱动,相机拍摄,然后模数转换成二进制 这里的tmp接收这些二进制数据,
问题是这个tmp中的数据不是连续的 比如说着个tmp长度为3,第一块内存空间里是1,第二块内存空间里是null,低三块空间里是0 也就是说 tmp 1 null 0 现在我要把1 null 0 这个模型数据保存到sqlite3中 在保存的过程中 遇到null 就认为数据结束了 只能把1保存到数据库中
haoahui
2010-04-02
打赏
举报
回复
类型为BYTE ,自己定义的 typedef unsigned char BYTE;
jbz001
2010-04-02
打赏
举报
回复
还有,你的意思我没看明白
jbz001
2010-04-02
打赏
举报
回复
申请动态内存时没有指定数据类型
二进制
流与图片的相互转换
将图片转换成
二进制
流存入
数据
库和将
二进制
流转换成图片显示出来;
读取注册表
二进制
键值并分组显示_C#_注册表_
使用 C# 读取注册表
二进制
键值并分组显示
以
二进制
方式打开文件并显示
利用C库函数,轻松实现以
二进制
方式打开文件并显示
用栈实现十进制转换成
二进制
(c语言)
用栈实现十进制转换成
二进制
(c语言)用栈实现十进制转换成
二进制
(c语言)用栈实现十进制转换成
二进制
(c语言)
将结构体写入
二进制
文件
将结构体
数据
写入
二进制
文件,从
二进制
文件中读取结构体
数据
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章