社区
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
在线等您回答
...全文
298
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# 读取注册表
二进制
键值并分组显示
PHP 字符串与
二进制
互转
NULL
博文链接:https://onestopweb.iteye.com/blog/2399320
以
二进制
方式打开文件并显示
利用C库函数,轻松实现以
二进制
方式打开文件并显示
读取
二进制
文件,byte[]转int型
里面有代码和一定的解释,适合新手阅读,代码比较简单,容易理解,而且解释也比较详细,我也是从一个新手慢慢做过来的,希望对大家有所帮助
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章