• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

如何把一串字符串运算转化成定长字符串?

hayden 2018-11-01 浏览量:757

一般来说单片机的UID是96位,NRF24L01的通信是五位16进制数,使用什么算法能运算成可以使用的地址?

同时又保证唯一性,降低重复率?

比如MD5这样的算法,但是要MD5加密后的值是128bit的,按4位二进制组合成一个十六进制,所以最后出来的十六进制字符串是32个,比如d3379f609e1aa88da2f50018d4fa218f

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 单片机的UID,计算 MD5值,这个是唯一的。

    NRF24L01 五位16进制数​,计算 MD5 值,

    取第一个MD5 值,位数不够用第二个 MD5 值去补,需要几位补几位

    这是一种,也有其他的方法

    • 发布于 2018-11-01
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 可以用96位后面的uid这样就能发送5位16进制了
    • 发布于2018-11-01
    • 举报
    • 评论 1
    • 0
    • 0
yhj416606438 回复了 yhj416606438 :用crc校验也可以的 回复

  • UID和可以使用的地址没有关系啊,你是想加密、认证?

    • 发布于2018-11-01
    • 举报
    • 评论 4
    • 0
    • 0
hayden 回复了 xdsnet :不是加密,也不是认证,就是想把UID的96个数变成NRF通信地址,保证唯一性,算是散列提取吧 回复
xdsnet 回复了 hayden :你在程序中这样搞,会不会不方便移植啦? 回复
hayden 回复了 xdsnet :跟移植有关系吗?!!! 回复
xdsnet 回复了 hayden :不同的芯片按你的要求都有不同的UID,产生不同的地址,这难道不和移植相关,或者说是适配不同的芯片相关?除非相应的地址能够限定到一个合理的范围,但这又和唯一性(相互区别)矛盾啊 回复

  • 将那个UID全部提取成char的数组,然后用CRC16的校验,即可实现16位的
    • 发布于2018-11-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 你可以直接用UID转换成char类型并进行输出
    • 发布于2018-12-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

如何把一串字符串运算转化成定长字符串?