• leetcode 与 ide 运行结果不一样

    在做 leetcode 的第 15 题 3Sum 时发现,同样的代码在本地运行的结果是正确的,而在 leetcode 的服务器上结果却是错误的。而且检查了程序中,也并没有使用全局或者静态变量。

    这里写图片描述

    通过打印,仔细对比两种环境下的输出发现,原来是代码有一条语句指针指向了数组外边的第一个地址。语句的内容是比较当前地址的值是否和后一个地址的值相同, 由于后一个地址实际上已经发生了溢出,在当前地址为数组最后一个元素时,下一个地址就在数组外边了,这个地址的值是不确定的。在本地调试时,由于两个地址的值不同,所以程序结果正确,而在 leetcode 服务器上运行时,这两个值相同,因此程序最终的结果就错误了。

    这里写图片描述

  • j-link v9 修复记录

    j-link v9

    主控: stm32f205RC

    现象

    • 1、给 M0 下载固件的过程中经常出错,提示找不到M0。需要反复尝试很多次才可以下载。
    • 2、在一次正常的拔线断电后,再也无法识别,灯也不亮了。

    修复方法一

  • MPEG Audio 简述

    MPEG AUDIO 简介

    MP3 是 MPEG Layer3 音频压缩技术的简写,这种技术可在音质极少损伤的情况下获取更好的压缩性能。MP3文件可以被压缩成不同的速率,文件压缩的越小,音质损伤越大。标准的压缩比例为10:1,一段3分钟的音频数据压缩后只需4MB大小。

    MPEG 音频压缩算法由联合图像专家组开发,作为高质量数字音频数据压缩的国际标准。MPEG-1 音频压缩算法基于两种机理来减少音频信号码率额,一是利用统计相关性,去除音频信号的冗余,二是利用人耳的心理声学现象如频率掩蔽和时间掩蔽等,去除听觉冗余。分为三个层次,分别是 layer1,layer2,layer3,每个层次针对不同的应用,但是三个层次的基本模型是相同的,每个后继的层都有更高的压缩比,但是需要更加复杂的编解码器。

    更新的版本是 MPEG-2,这个版本扩展了MPEG-1的采样率标准,在 MPEG-1 的 32kHz,44.1kHz, 48kHz 的基础上,支持16kHz,22.05kHz,24kHz 采样率。并且MPEG-2还支持多通道。

    有一个非官方的标准MPEG-2.5,支持更低的采样率,支持8KHz,11.025kHz 和 12KHz。

  • 前导零计数

    前导零计数

    计算一个 32位 数头部 0 的个数。例如 1 前面有 31 个0, 0 则前面有 32 个0。

    C 语言实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int cntLeadingZeros(uint32_t i)
    {
    int ret = 0;

    uint32_t temp = ~i;

    while(temp & 0x80000000)
    {
    temp <<= 1;
    ret++;
    }
    return ret;
    }
  • fread 返回 0

    fread 函数一直返回 0,检查过读取的数量不会超过文件大小,错误发生在打开文件时错误。

    错误代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FILE *in_file, *out_file;
    unsigned int open_files(const char *in_file_name, const char *out_file_name)
    {
    if( in_file = fopen(in_file_name, "rb") == NULL) //err
    return 0;

    if( out_file = fopen(out_file_name, "wb") == NULL) //err
    return 0;

    return 1;
    }
  • 记一款游戏--《程序员升职记》

    这里写图片描述

    最近在玩一款编程类的游戏,叫做《程序员升职记》,steam 平台只需¥36。通过组合几条非常基本的指令,例如加减、自加、自减、比较、跳转,实现一些小功能,例如简单的数值绝对值输出、两数乘法、阶乘运算、反转字符串等。游戏的本质是一款支持 11 条指令,最多支持 24 字节内存的 8 位 cpu 的运行。

  • PCM 转 WAV

    PCM 数据无法直接通过播放器打开,因为少了 44 字节的文件头,这里面最主要的信息是描述该 PCM 的采样频率,通道数,以及位数。

    双击 pcmToWav.exe,拖入待转换的 PCM 数据,输入通道数和采样频率,默认使用 16-bit 表示一个采样点。等待程序运行结束,就会生成一个同名的 .wav 文件。

    这里写图片描述

    python 源码

  • 文件转换为C数组 fileToC

    fileToC

    github项目地址

    简单说明

    fileToC 是一款使用 python 编写的程序,可以将任意文件的二进制数据转换为 .C 文件的数组,以便程序编译。

    双击 fileToC.exe 程序,将要转换的 test.any 文件拖入命令行,等待程序自动转换,结束后便可以得到一个和该文件同名的 .c 文件

  • CSDN博客数据导出

    CSDN2HEXO 源码地址

    CSDN2HEXO

    CSDN2HEXO 是一款基于CSDN开放平台 的 csdn blog 内容下载器, 可以下载博客中的文章内容和图片,文章保存为 markdown 格式,图片可下载无水印图片,并根据文章标题生成文件夹存储相关数据。

    用法

  • C语言中,隐藏结构体的细节

    本文转载自 博客园

    我们都知道,在C语言中,结构体中的字段都是可以访问的。或者说,在C++ 中,类和结构体的主要区别就是类中成员变量默认为private,而结构体中默认为public。结构体的这一个特性,导致结构体中封装的数据,实际上并没有封装,外界都可以访问结构体中的字段。

    C++中我们尚可用类来替代结构体,但是,C语言中是没有类的,只能用结构体,但很多时候,我们需要隐藏结构体的字段,不让外界直接访问,而是通过我们写的函数进行间接访问,这样就提高了程序的封装性。

12345615