随笔:62 文章:1 评论:105 阅读: 37万

2023年3月4日

目的

把一个ulong(uint64_t)的数字保存到标签内存里面区,给标签分配了8个字节。现在是要写进去,以及写进去后能读出来。

第一步

把uint64_t写到内存中

void UHFReader_Worker::Write(uint64_t uid) const{
    QByteArray data;
    data.append(uid);    //把uint64_t转成byte 
 FILMSOUT_DEBUG(logger, QString(
"data:%1") .arg(QString(data.toHex(' ').toUpper())));
}

 测试

TEST_F(FilmsOut_ReaderTest, write) {
    
    uint64_t u = 1;
    reader->worker()->Write(u);
    
    u = 101;
    reader->worker()->Write(u);
    
    
    u=10105;
    reader->worker()->Write(u);
}

结果

FilmsOut_ReaderTest.write
07:57:06,932.457 [18484] DEBUG uhf.worker - data:01 
07:57:06,932.661 [18484] DEBUG uhf.worker - data:65 
07:57:06,932.840 [18484] DEBUG uhf.worker - data:79 

第一个和第二个没有问题,第三个明显问题。难道不应该是 27 79么

 

问题在哪儿

 帮助文档里面说

QByteArray &QByteArray::append(char ch)

并没有说可以append(uint64_t x)的类型,但是编译器也不报错。看来编译器把uint64_t 自动转换成 char也就是int8_t了,转的过程只取了uint64_t的低8位。(我也就入坑了)

怎么解决

既然uint64占用8字节,那就先占用8字节。然后把uint64的复制过去。

QByteArray data; 
data.resize(8);                          //长度固定8字节  
memcpy(data.data(),&uid,sizeof(uid));    //复制到字节数组里

结果

FilmsOut_ReaderTest.write

08:12:10,456.758 [22020] INFO  tst.reader - open eqp connect:0 
08:12:10,456.993 [22020] DEBUG uhf.worker - data:01 00 00 00 00 00 00 00 
08:12:10,457.175 [22020] DEBUG uhf.worker - data:65 00 00 00 00 00 00 00 
08:12:10,457.337 [22020] DEBUG uhf.worker - data:79 27 00 00 00 00 00 00 

结果还是不对头哇

大小端问题

还需要反转一下数组,

    QByteArray data;
    data.resize(8);
    memcpy(data.data(),&uid,sizeof(uid));
    std::reverse(data.begin(),data.end());        //反转数组

最后

FilmsOut_ReaderTest.write
 name:COM8 fail: 1. 
08:14:27,353.655 [22308] INFO  tst.reader - open eqp connect:0 
08:14:27,354.004 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 00 01 
08:14:27,354.378 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 00 65 
08:14:27,354.688 [22308] DEBUG uhf.worker - data:00 00 00 00 00 00 27 79 
posted @ 2023-03-04 16:17 Dtscal 阅读(304) 评论(0) 推荐(0) 编辑

2015年12月8日

摘要: 由于之前项目为了查询方便,且不受权限控制。所以把image储存在了数据库。但是也遇到了很多瓶颈问题。1,丢图从日志上查询获知,丢图95%以上是由于mysql的timeout时间失效引起的。(由于另一个pdf文件也此存储在mysql上面pdf频繁存储到数据库,占用连接。一个图片有时候可以有20-30m... 阅读全文
posted @ 2015-12-08 21:14 Dtscal 阅读(6013) 评论(0) 推荐(0) 编辑

2015年10月21日

摘要: typeHandler 是针对把数据库里面的某列的数据类型转换的应用程序中的数据类型,简单的说就是把 type=>dbType 反之把dbType=>type. 例如数据库某列的内容是longbolb类型的,实际存的就是byte[] 数组. 那我repository 通过select 以后要把lon... 阅读全文
posted @ 2015-10-21 14:54 Dtscal 阅读(619) 评论(0) 推荐(0) 编辑

2015年10月19日

摘要: 在写完sql语句以后,如果参数有问题.还真不知道该如何看参数.原来Ibatis 是通过日志输出,看到参数的.IBatis 内置的日志输出是log4net,所以可以参考ibatis的api.照着复制其配置文件.其内容是 ... 阅读全文
posted @ 2015-10-19 15:20 Dtscal 阅读(351) 评论(0) 推荐(0) 编辑
 
摘要: 目前自己接触的加密场景连接字符串里面加密用户表里面的密码加密先总结一下这两种场景加密的差异和区别吧。连接字符串的加密根据项目的不同有的只是加密数据库连接的密码进行加密,有的是对整个字符串进行加密。只是为了在配置文件的里面的字符串让人看不懂。但是到了创建连接对象的时候还得把那一串看不懂的字符串转换成连... 阅读全文
posted @ 2015-10-19 14:01 Dtscal 阅读(554) 评论(0) 推荐(0) 编辑

2015年1月6日

摘要: 点击[上月]按钮直到没有数据,上月按钮禁用。并提示无数据。 最直接的思路就是datagrid('reload',{month:-1}); 可是这样,想了很多办法无法获取加载的数据。 最简单的办法: $.ajax({ url:'/C000000213?action=ln&pMonth=1', ... 阅读全文
posted @ 2015-01-06 21:27 Dtscal 阅读(3421) 评论(0) 推荐(0) 编辑

2014年12月9日

摘要: 需求 从后台获取的数据是这样的 上帝要这样的 背景 从后台获取到表格数据,然后填充到excel.当然是用js来填充的。js 本身的数组具有sort()功能。但是是针对一列数据。这里是两列数据。肿么办?看看w3c教程上说 arrayObject.sort(sortby); sortby 默认是空的。也就是按照字符串的编码进行排序。 sortb... 阅读全文
posted @ 2014-12-09 12:11 Dtscal 阅读(3273) 评论(0) 推荐(0) 编辑

2014年12月6日

摘要: 官方解释 String String 类代表字符串。字符串是常量;它们的值在创建之后不能更改。 StringBuilder 一个可变的字符序列。 疑问 字符串是常量;它们的值在创建之后不能更改。那 String s="abc";s=s+"23"; 作何解释。API说Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。也就是说:... 阅读全文
posted @ 2014-12-06 00:04 Dtscal 阅读(276) 评论(0) 推荐(0) 编辑

2014年12月4日

摘要: 现状1+1=?,不加思索2。有一个数字要存储在程序里,不加思索int。那为什么java要弄一个Integer类型出来?有什么用?怎么用?差别在哪儿?度娘说java提供了两种数据类型,一种是值类型,一种是引用类型。int是值类型,Integer是引用类型。那什么是值类型,神马是引用类型我知道的:计算机... 阅读全文
posted @ 2014-12-04 23:54 Dtscal 阅读(336) 评论(0) 推荐(0) 编辑

2014年12月3日

摘要: 现状 工作时间5年,实际编程年限3年。从事过ado+asp.net+sql+html的项目开发部,转折点吧。然后一直跟着先在的老大从事管理软件平台的开发。也算是入门吧,中间也有其他程序员加入到我们团队。其中一个因为比较聊的来,还成了朋友。他来有4个多月,做事比较着急。有自己的思路,(最后还是回上海去... 阅读全文
posted @ 2014-12-03 21:30 Dtscal 阅读(5999) 评论(81) 推荐(20) 编辑
点击右上角即可分享
微信分享提示