0x14 内容简介与例题习题

uds的0x14服务介绍 如果问题依然存在或不能通过UDS 0x14服务进行清除,则车主必须找到更深层次的问题,并可能需要进行更加复杂的故障排除和修理。执行ClearDTC:一旦技师确定DTC已经被记录并处理完毕,他们可以使用UDS 0x14服务执行ClearDTC操作,以清除记录的DTC信息。为此,车主可能需要带着车辆到附近的修车店,让维修工人查询故障,并使用UDS诊断工具进行清除操作。总之,通过使用UDS 0x14服务清除故障码,技师可以解决许多车辆故障问题,并保证发动机、传动和制动等关键系统的正常运转。 阅读详情

《算法竞赛进阶指南》读书笔记汇总
这里面是我在阅读《算法竞赛进阶指南》这本书时的一些思考,有兴趣可以瞧瞧!
如若发现什么问题,可以通过评论或者私信作者提出。希望各位大佬不吝赐教!

字符串哈希

这里主要介绍字符串哈希,它算是一个暴力算法,当我们在处理字符串类型的题目时,如果没有思路,不妨试试哈希。字符串哈希在 O ( n ) O(n) O(n)处理出字符串所有前缀的哈希值之后,可以 O ( 1 ) O(1) O(1)查询任意子串的哈希值。
一般,我们的哈希函数设计为:取一个固定的 P P P值,把字符串看成是 P P P进制数,并分配一个大于0的数值,代表每种字符,然后取一固定值 M M M,求出该 P P P进制数对 M M M的余数,即对 M M M取模,作为该字符串的哈希值。
一般而言,我们取 P P P值为131或13331,此时产生冲突的概率几乎为0;我们取 M M M为 2 64 2^{64} 264。为了代码写起来方便,我们定义哈希值类型为 u n s i g n e d unsigned unsigned l o n g long long l o n g long long。
下面我们看看例题与习题来体会一下字符串哈希的简单应用吧。

【例题】兔子与兔子(AcWing138)

题目链接
思路: 题目要快速查询某两个子串是否相等,那我们不难想到用字符串哈希。预处理出所有前缀的哈希值之后,可以实现 O ( 1 ) O(1) O(1)查询任意子串的哈希值。具体实现比较简单,见代码。

AC代码:

#include<bits/stdc++.h>
#define N 1000005
#define ull unsigned long long

using namespace std;

const ull P = 13131;

int n;
char s[N];
ull h[N];

ull qpow(ull a,int b){
    ull res = 1;
    while(b){
        if(b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}

void solve(){
    scanf("%s",s + 1);
    n = strlen(s + 1);
    
    for(int i = 1;i <= n;i ++){
        h[i] = h[i - 1] * P + s[i] - 'a';    
    }
    
    int q;scanf("%d",&q);
    while(q --){
        int l1,r1,l2,r2;
        scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
        if(h[r1] - h[l1 - 1] * qpow(P,r1 - l1 + 1) == h[r2] - h[l2 - 1] * qpow(P,r2 - l2 + 1))
            puts("Yes");
        else 
            puts("No");
    }
}

int main(){
    solve();
    return 0;
}

【例题】回文子串的最大长度

题目链接
思路: 首先我们需要统一奇数与偶数的回文子串的处理方式,常见的方法是在每两个字符中间添加一个没有出现过的特殊字符,把原串长度变为原来的两倍。
然后预处理出新串及其反串的所有前缀的哈希值。
最后我们枚举每一个位置作为回文中心,二分最大长度。对于每一个长度 m i d mid mid的判定,我们判断反串中对应子串的哈希值与新串中对应子串的哈希值是否相同即可。对应的子串位置可以自己画图看看,很容易找到滴。

AC代码:

#include<bits/stdc++.h>
#define N 2000005
#define ull unsigned long long

using namespace std;

int n;
char s[N],sr[N];
ull h[N],hr[N];
ull p[N];
int kase;

ull get(ull h[], int l, int r){
    return h[r] - h[l - 1] * p[r - l + 1];
}

void solve(){
    n = strlen(s + 1);
    for(int i = 2 * n;i > 0;i -= 2){
        s[i] = s[i / 2];
        s[i - 1] = 'z' + 1;
    }
    
    n *= 2;
    for(int i = 1, j = n;i <= n;i ++, j --) sr[j] = s[i];
    p[0] = 1;
    
    for(int i = 1;i <= n;i ++)
    {
        h[i] = h[i - 1] * 13131 + s[i] - 'a';
        hr[i] = hr[i - 1] * 13131 + sr[i] - 'a';
        p[i] = p[i - 1] * 13131;
    }

    int ans = 0;
    for(int i = 1;i <= n;i ++){
        int l = 0,r = min(i - 1,n - i);
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(get(h, i - mid, i - 1) == get(hr, n - (i + mid) + 1, n - (i + 1) + 1)) l = mid;
            else r = mid - 1;
        }
        if(s[i - l] == 'z' + 1) ans = max(ans, l);
        else ans = max(ans,l + 1);
    }
    
    printf("Case %d: %d\n", ++kase, ans);
}

int main(){
    while(scanf("%s",s + 1) && !(s[1] == 'E' && s[2] == 'N' && s[3] == 'D'))
        solve();
    return 0;
}

【例题】后缀数组(AcWing140)

题目链接
思路:后缀数组的哈希做法时间复杂度比基数排序做法多了一个 l o g log log,也是比较经典的,可以了解一下。我们用最朴素的想法,对所有后缀进行排序,用自己定义的比较函数去快排所有后缀。由于我们可以 O ( 1 ) O(1) O(1)查询任意子串的哈希值,那么我们可以二分两个不同后缀最长公共前缀的长度,那么这个长度的下一个位置就是这两个不同后缀第一个不相同字符位置,我们只需比较这两个字符的大小即可比较两个不同后缀的大小,复杂度为 O ( l o g n ) O(logn) O(logn)。对于 h e i g h t height height数组的求解也是二分,一模一样就不再赘述啦。

AC代码:

#include<bits/stdc++.h>

using namespace std;

typedef unsigned long long ULL;
const int N = 300005;
const int base = 131;

int n;
char s[N];
ULL h[N],p[N];
int sa[N];

ULL get(int l,int r){
    return h[r] - h[l - 1] * p[r - l + 1];   
}

bool cmp(int a,int b){
    int l = 0,r = min(n - a + 1,n - b + 1);
    while(l < r){
        int mid = l + r + 1 >> 1;
        if(get(a,a + mid - 1) == get(b,b + mid - 1)) l = mid;
        else r = mid - 1;
    }
    return s[a + l] < s[b + l];
}

void solve(){
    scanf("%s",s + 1);
    n = strlen(s + 1);
    
    p[0] = 1;
    for(int i = 1;i <= n; i ++){
        p[i] = p[i - 1] * base;
        h[i] = h[i - 1] * base + s[i] - 'a';
        sa[i] = i;
    }   
    
    sort(sa + 1, sa + 1 + n, cmp);
    
    for(int i = 1; i <= n;i ++){
        if(i != 1) printf(" ");
        printf("%d",sa[i] - 1);
    }
    puts("");
    
    printf("0");
    for(int i = 2;i <= n;i ++){
        int l = 0,r = min(n - sa[i] + 1,n - sa[i - 1] + 1);
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(get(sa[i],sa[i] + mid - 1) == get(sa[i - 1],sa[i - 1] + mid - 1)) l = mid;
            else r = mid - 1;
        }
        printf(" %d",l);
    }
}

int main(){
    solve();
    return 0;
}
深入解析UDS诊断协议:0x19与0x14服务的故障码处理机制 本文深入解析了汽车UDS诊断协议中0x19(读取DTC信息)与0x14(清除诊断信息)两大核心服务。详细阐述了故障码(DTC)从产生、状态管理到被读取和清除的完整机制,并结合实战经验,探讨了服务实现中的关键要点与典型问题,为汽车电子工程师提供实用的开发与调试指南。 阅读详情

相关推荐

深入解析Modbus文件读写功能码0x14与0x15:从协议规范到实战应用

本文深入解析Modbus协议中的文件读写功能码0x14与0x15,从协议规范到实战应用全面覆盖。通过详细的功能码对比、协议层解剖和工业现场案例,帮助开发者掌握批量读写文件记录的技巧,提升工业自动化设备间的数据传输效率与安全性。

sat99的博客 824

C语言编程基础----常量&变量

常量:  数字    十进制数(Dec)  20   八进制(Oct) 024   十六进制(Hex)  0x14  二进制数(Bin)  0b10100字符‘ ‘    man ascii  ‘a’    字符a的ascii码是97 ‘A’    字符A的ascii码是65‘0’    字符0的ascii码是48   转义字符在字符中用\表示    ‘\n’   换行符    Linux中一次...

SmallNewBirdBird的专栏 635

UDS诊断实战:深入解析0x19与0x14服务的报文交互与故障追踪

本文深入解析UDS诊断协议中的0x19与0x14服务,详细介绍了故障码读取、快照数据分析及清除操作的实战技巧。通过ISO 14229标准下的报文交互案例,帮助工程师高效追踪汽车电子系统故障,提升诊断效率与精准度。

weixin_30374009的博客 427

【java】字符编码问题

0.常识 Java的内存编码是Unicode,UTF-16 Linux 默认ISO-8859-1 Win32 默认GB2312 字符集charset:多个字符的集合。例如GB2312是中国国家标准的简体中文字符集。 字符编码(Character encoding):把字符集中的字符编码(映射)为特定的字节或字节序列的规则,以便文本在存储和在网络中传输。 0.1 常用字符集&...

opi 475

Modbus 0x14/0x15文件读写功能码详解:从报文结构到Python脚本实战

本文深入解析Modbus协议中的0x14(读文件记录)和0x15(写文件记录)功能码,详细讲解其报文结构和Python实现方法。通过实战代码示例展示如何在工业自动化项目中高效应用这些功能码进行批量数据操作,并提供了常见问题解决方案和性能优化技巧,帮助开发者提升Modbus通信效率。

weixin_30520015的博客 539

UDS 诊断 - ClearDiagnosticInformation(清除诊断信息)(0x14)服务

字节参数名称字节值#1ClearDiagnosticInformation(清除诊断信息)请求SID0x14#2#3#4定义groupOfDTC(DTC 组)本参数包含一个 3 字节值,该值可说明 DTC 组(如,动力总成、车身以及底盘)或待清除的特殊 DTC。字节参数名称字节值#1ClearDiagnosticInformation(清除诊断信息)响应SID0x54。

耳朵东金子千的博客 1573

ASCII码表

十进制字符十六进制描述0NUL0x00空字符1SOH0x01标头开始2STX0x02正文开始3ETX0x03正文结束4EOT0x04传输结束5ENQ0x05查询6ACK0x06确认7BEL0x07响铃8BS0x08退格9TAB0x09水平制表符10LF0x0A换行符11VT0x0B垂直制表符12FF0x0C换页符13CR0x0D回车符14SO0x0E变换输出15SI0x0F。

2401_88035404的博客 664

Modbus文件读写功能码0x14与0x15的实战解析:从协议细节到工业应用

本文深入解析Modbus协议中文件读写功能码0x14与0x15的技术细节与工业应用,涵盖协议结构、工程实现要点及典型应用场景。通过实例代码和性能优化策略,帮助开发者掌握批量数据传输技术,提升工业自动化系统的通信效率与可靠性。

weixin_29179311的博客 362

计算机键盘符号的B的ASCII码,ASCII码字符对照表

Bin(二进制)Oct(八进制)Dec(十进制)Hex(十六进制)缩写/字符解释0000 00000000x00NUL(null)空字符0000 00010110x01SOH(start of headline)标题开始0000 00100220x02STX (start of text)正文开始0000 00110330x03ETX (end of text)正文结束0000 01000440x...

weixin_26937243的博客 3935

STM32H7 FMC驱动TFT-LCD原理与实战

TFT-LCD并行接口驱动是嵌入式人机交互的基础技术,其核心在于将显示控制器抽象为存储器映射设备,依托硬件时序控制器实现低开销、高确定性刷新。FMC(Flexible Memory Controller)作为STM32H7系列的关键外设,通过地址/数据总线复用、可配置读写时序及Bank分区机制,支持将ILI9341、ST7789等主流LCD控制器挂载为‘慢速异步存储器’,从而替代GPIO模拟8080时序或LTDC+DMA2D方案。该技术显著降低CPU占用率,提升帧率稳定性,适用于工业HMI、实时仪表盘等对响

weixin_32306683的博客 548

kali破解wifi之airmon-ng 工具利用

......

qq_42378173的博客 1万+

算法竞赛进阶指南---0x14(Hash)后缀数组

题面 题解 我们先来看朴素做法,对于一个长度为n的字符串,它的后缀也有n个,将他们排序(用快排)是 O(nlogn) ,如果是暴力比较两个字符串的字典序是 O(n) ,那么总的时间复杂度就是O(n2logn) ,显然不符合题中要求,那么如何做到题中所说的O(nlog2n) 呢?按题中思路来 我们的后缀数组用字符串下标表示 sa[i] 就表示下标 i到n的字符 例如sa[1]表示"ponoiiipoi" sa[10]表示"i" 这样我们虽然在快排的时候无法优化,但是可以在比较两个字符串的时候可以

qq_44791484的博客 284

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 185

【AutoSar_UDS服务】0x14服务_清除DTC

UDS 0x14服务详解

Gagaaaaaa的博客 3954

063、推挽变换器的磁偏问题与解决

本文针对推挽变换器中的磁偏问题展开分析。作者通过实际案例指出,磁偏主要由开关管导通压降差异和驱动信号不对称引起,会导致变压器饱和、MOS管炸毁等问题。文章提供了四种解决方案:采用电流模式控制、添加隔直电容、优化对称驱动设计以及引入磁芯气隙(作为最后手段)。调试时应重点观察原边电流波形对称性、变压器声音和直流分量。作者强调实践经验的重要性,建议预留隔直电容位置,并指出推挽拓扑在500W以上功率场合的局限性。这些基于实战的经验总结为电源工程师提供了有价值的参考。

Jack010169的博客 312

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 257

UDS诊断服务0x19与0x14核心要点

深入拆解UDS诊断协议中0x19(读取故障码信息)和0x14(清除故障码)服务的请求响应格式、子功能逻辑及典型应用场景,结合实车通信案例说明状态位处理与DTC筛选机制,助你扎实掌握uds诊断关键服务。

weixin_42160645的博客 308

别再只会复制Haar级联代码了!OpenCV人脸检测全方案深度解析,从原理到工业级落地

通用预训练模型在你的业务场景效果不好时,用自己的业务数据集训练专属的级联器,是提升精度的终极方案,OpenCV自带和工具,支持自定义Haar/LBP级联器训练。场景首选方案次选方案新手入门学习Haar级联分类器LBP级联分类器嵌入式轻量固定场景LBP级联分类器YuNet轻量版工业级落地项目(99%场景)DNN+YuNetMTCNN多人脸+小目标复杂场景DNN+YuNet自定义微调模型同时做人脸+其他目标检测。

2601_94871597的博客 380

【UDS】ISO14229之0x14服务

简称: “ClearDiagnosticInformation”,清除DTC信息 功能: 用户通过请求该服务,清除一个或者多个指定ECU记录的DTC故障信息,这些故障信息存储在NVM(非易失性存储)中。总而言之,相比较0x19服务,该服务相对比较简单。当请求该服务之后,ECU回复正响应,即使没有存储任何DTC故障信息。若ECU支持内存中多份DTC状态信息副本(例如:一份存在RAM里,一份存在EEPROM里,当然大部分是用flash模仿EEPROM的功能),则ECU会清除0x19 Sub-function 0

weixin_48498880的博客 7081

北京大学MuMo多模态肿瘤分类模型复现与迁移学习

本项目复现了北京大学MuMo多模态肿瘤分类模型,并针对特定医学影像数据集进行迁移学习。MuMo模型通过整合CT、MRI、PET等多模态医学影像数据,显著提升了肿瘤分类准确性。项目内容包括环境配置(Python 3.8+、PyTorch 1.9+)、数据预处理(DICOM/NIfTI格式处理、强度归一化)、多模态数据集类实现,以及训练验证测试集划分。关键特点是采用MONAI医学影像处理库,实现三维医学影像的标准化预处理流程,并支持多种模态数据的并行加载与联合训练,为后续模型复现和迁移学习奠定基础。

max500600的博客 1241

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【ISO14229_UDS_0x14服务详解】

本文介绍了0x14服务(ClearDiagnosticInformation,清除诊断信息服务)的使用说明

weixin_43722921的博客 2231

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

uds 0x19 0x14 服务总结

uds 19 14服务总结

m0_58150214的博客 2642

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

modbus协议(文件读写) 0x14 0x15

6.14 20 (0x14) Read File Record This function code is used to perform a file record read. All Request Data Lengths are provided in terms of number of bytes and all Record Lengths are provided in terms of registers. A file is an organization of records. Eac

波波诸葛伟 5409

整车诊断清除DTC服务0x14

DTC就是诊断故障码,英文名Diagnostic Trouble Code,用于指示车辆系统中出现的故障。每一类故障码组成一组DTC组,0x14服务是按照DTC组清除被测对象记录的故障码(DTC)内容,只包括当前故障,不清除历史故障和快照。一清除就整个组里面的全部故障码都清除,不能清除单独某一个故障码。需要注意的是,清除故障码只是将当前故障清除,并不代表故障本身已经被修复。如果故障仍然存在,它可能会再次被检测到,并生成新的当前故障。因此,在清除故障码之前,应该先确保故障已经被解决。

qiu421的博客 1807
上一篇: 0x12 内容简介与例题习题
下一篇: 0x15 内容简介与例题习题
juruo_c
博客等级 码龄6年 520粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值