- 博客(80)
- 资源 (55)
- 问答 (1)
- 收藏
- 关注
原创 jpeg压缩算法学习(2)——ZigZag
ZigZag算法目的是将离散变换后的二维数组转成一维数组,且将大数值(高能力)放在数组前面,小数值(低能力)放在数组末尾,方便后面进行霍夫曼编码。以上代码来自github上的开源项目: https://github.com/thejinchao/jpeg_encoder.git。称为能力集中(Energy Compaction),这为有损压缩提供可能性,就是将右下角数值小的部分舍弃掉。
2024-06-09 09:20:48
476
原创 PyTorch官网demo解读——第一个神经网络(1)
神经网络如此神奇,feel the magic今天分享一下学习PyTorch官网demo的心得,原来实现一个神经网络可以如此简单/简洁/高效,同时也感慨PyTorch如此强大。
2023-12-16 15:52:50
1092
原创 Android double-close测试
背景在linux系统调用close()函数关闭一个文件描述符可能失败,细心谨慎的程序员可能会检测返回值,如果返回失败再做重试,但这就可能导致了double-close问题。查看close()函数的man手册:Retrying the close() after a failure return is the wrong thing to do, since this may cause a reused file descriptor from another thread to
2022-05-28 15:52:41
380
原创 裸调linux write()接口
背景我们知道linux提供了很多系统调用给应用程序使用,但linux并没有将这些系统调用封装成C语言接口,而是提供一个软中断,然后应用程序需要通过软中断带上系统调用编号和参数去调用接口,这对于应用程序相当的不友好。这时候libc库便登上了历史舞台,它将这些系统调用封装成一个个函数,形象生动地提供给应用程序使用,从此之后,应用程序只需要调用那些write(), read(), exit()等便能达到目的,而不是通过软中断去使用这些接口。。然后,当我们熟悉了这些符号接口的时候,却不知道背后是怎么工作
2022-05-01 10:42:15
3027
原创 C语言单井号#使用
C语言中#用于宏定义中,将符号变成对应的字符串,在编译阶段就完成了转换工作#include <stdio.h>#define printInt(x) printf("%s=%d\n", #x, x)void main(){ int age = 100; printInt(age);}上面的代码运行结果是:age=100...
2022-04-02 15:57:12
749
原创 C++ 11 shared_ptr 自定义析构函数
#include <iostream>#include <memory>void main(){ std::shared_ptr<int> ptr(new int(100), [](int* pInt){ std::cout << "destruct interger " << *pInt << std::endl; delete pInt;});}运行结果:
2022-03-23 18:19:48
2609
原创 COM的INTERFACE使用实践
INTERFACE用于声明库的接口,下面我们将实现一个简易的数学库来实践一下。我们首先声明一个接口类IMath,该类继承自IUnknown;IMath有两个方法供外部调用,分别为add和sub#undef INTERFACE#define INTERFACE IMathDECLARE_INTERFACE_(IMath, IUnknown) { STDMETHOD_(int, add)(THIS_ const int x, const int y) PURE; STDMETHOD_(i
2022-02-09 16:46:40
1324
原创 UDP使用connect()和send()函数
UDP socket使用connect()函数连接服务器地址后,可直接调用send()函数发送数据,而不必像sendto()函数那样每次都要指定服务器地址,据说这样可以提高效率。来写两个小程序玩玩:client.cpp#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <arpa/inet.h>#inc
2022-01-06 11:08:22
2883
2
原创 图形渲染学习
推荐一个opengl的学习教程:简介 - LearnOpenGL CN推荐一个矩阵的学习教程:麻省理工公开课:线性代数-网易公开课好的东西要拿出来分享 :=),也为原作者做个宣传,哈哈!希望学完可以写个游戏愉悦自己 ~~...
2021-12-31 18:36:47
197
原创 C++运算符重载
#include <iostream>#include <algorithm>using namespace std;class OOT{public: explicit OOT(int v) : m(v) { } int value() const { return m; }public: inline bool operator > (const OOT& x) const { return m > x.m;.
2021-12-08 18:14:07
532
原创 C语言##连接符使用
## 用于连接名称,函数名、变量名等#include <iostream>using namespace std;char name_a[20] = "aaa";char name_b[20] = "bbb";char name_c[20] = "ccc";char name_d[20] = "ddd";/** * 方式一:展开成对应的变量,直接打印 */#define PRINT(n) {cout << name_##n << endl;}
2021-11-12 15:56:40
3410
原创 程序结束不会自动调用堆对象的析构函数
使用new申请的对象,如果不主动delete掉,在程序运行结束的时候系统释放会调用对象的析构函数呢?我们写个小程序试试#include <iostream>#include <string>class A{public: A(std::string method); ~A(); private: std::string m_method;};A::A(std::string method){ m_method = method; st
2021-08-04 19:45:35
1429
原创 TCP SO_SNDBUF
最近做了个tcp测速工具,在部分机器上测速结果很小,只有其它机器的十分之一,折腾了一整天,最后发现是那些机器的发送缓冲区太小了。调整发送缓冲区大小:
2021-05-15 09:46:04
827
转载 200行代码实现推流到直播平台
原文:https://blog.youkuaiyun.com/leixiaohua1020/article/details/42104945看了雷神的文章后,尝试自己实现推流到YY直播。主要做了两点改进:1、支持直播码2、严格按flv文件中的时间戳推流,解决拉流观看视频卡顿问题前提:1、依赖librtmp库,需要自己下载源码编译(网上很多资料),我使用mac已经自带了librtmp库,省去了编译环节2、注册YY账号,到“个人中心”-> “开播设置”中获取推流地址和直播码,如下图
2021-03-14 16:58:11
787
原创 Failed to notify project evaluation listener
升级android studio到3.5.2后,项目build报错Failed to notify project evaluation listener. 折腾了好久没有解决;打开Event Log提示:NDK Resolution Outcome: Project settings: Gradle model version=4.6, NDK version is UNKNOWN打开local.properties,指定ndk路径:ndk.dir=/Users/fang/Librar
2020-05-30 16:41:38
4422
原创 打印errno错误描述小程序
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* argv[]){ if (argc != 2) { printf("invalid argument. eg: ./errno 1\n"); } int e = at...
2020-04-05 19:19:58
746
原创 pthread_cancel pthread_testcancel测试
pthread_cancel用于取消一个线程,但被取消的线程要有取消点,才能被取消。pthread_testcancel用于设置取消点/** * Created by fangruibin * 测试取消线程操作 */#include <stdio.h>#include <pthread.h>#include <unistd.h>...
2019-12-31 17:14:13
1808
1
原创 pthread可重入锁
可重入锁是指同个线程可多次申请同把锁,而不会导致死锁,只要在初始化的时候设置锁的属性为PTHREAD_MUTEX_RECURSIVE,即可达到目的/** * Created by fangruibin * 测试死锁产生的场景 */#include <iostream>#include <pthread.h>#include <unistd.h>...
2019-12-31 16:15:21
2145
原创 vscode C++关闭代码声明提示
把鼠标放在函数、变量等上面,会自动弹出提示,但挡住视线,有点不习惯。打开file->preferences->settings,编辑settings.json,增加"editor.hover.enabled": false...
2019-12-13 14:59:38
1363
原创 Unable to instantiate appComponentFactory
Android调试app跑起来就崩溃,一直提示Unable to instantiate appComponentFactory2019-12-12 19:37:11.983 4040-4040/fang.com.xxx E/LoadedApk: Unable to instantiate appComponentFactory java.lang.ClassNotFoundExce...
2019-12-12 19:44:33
18727
9
转载 函数中对没用到的参数使用(void)var
原文地址:https://stackoverflow.com/questions/21045615/what-does-voidvar-actually-do弄清楚C++中的一些细节,确实很有意思,值得回味。在C++中会看到一些函数参数没有用到,但是又不能去掉(例如继承下来的虚函数,暂时不想实现),这时候就可以在实现中(void)var,不然编译器会告警。例如:int main(...
2019-07-06 23:27:36
2170
原创 C++模拟产生死锁
产生死锁的条件是需要两把锁,两个线程各自持有其中的一把,在没有释放的前提下申请另一把。模拟代码如下:/** * Created by fangruibin * 测试死锁产生的场景 */#include <iostream>#include <pthread.h>#include <unistd.h>//定义两把锁pthread_mu...
2019-05-06 18:51:08
920
原创 queue.front()返回空元素
今天发现一个有意思的现象,当queue的元素全部pop出来了,queue.size() == 0,此时执行queue.front()不会出错,而是会返回一个空的元素。测试代码:#include <iostream>#include <queue>struct TestItem{ int a; int b; std::string c;};int...
2019-04-29 11:37:29
8756
2
转载 AES加密
加密解密可以正常使用,但是貌似存在一个内存泄漏问题,我移植到windows的版本解决了这个问题,但是代码已经找不到了。请自行分析解决头文件:#ifndef _AES_H_#define _AES_H_#define byte unsigned charclass Aes // Advanced Encryption Standard{ public: ~Aes...
2019-04-21 19:37:11
232
转载 svn仓库迁移到git仓库
1. 安装git,安装svn命令行工具(安装svn时勾选选项),并安装git bash, 打开git bash2. svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt 这个时候,应该在我...
2019-03-29 11:37:11
594
原创 C++ 整数转字符串
#include <sstream>std::ostringstream ostr;ostr << 100;std::string str = ostr.str();
2019-03-21 18:39:51
938
转载 JNIEnv和Dalvik的JavaVM的关系
(1)JNIEnv*内部包含一个Pointer,Pointer指向Dalvik的Java VM对象的Function Table,JNIEnv*关于程序执行环境的众多函数正是来源于Dalvik虚拟机;(2)Android中每当一个Java线程第一次要调用本地C/C++代码时,Dalvik虚拟机实例会为该Java线程产生一个JNIEnv*指针;(3)Java每条线程在和C/C++相互调用时,JN...
2019-03-17 21:49:56
220
原创 C++ 同类对象之间 = 赋值
#include <iostream>struct MySt{ int a; int b; MySt() { a = 0; b = 0; } void print() { std::cout << "a=" << a << std::endl << "b=" << b
2019-03-13 17:48:12
2313
VPPlusTest.rar
2019-11-16
WindowsMediaPlayer9.0 sdk
2017-11-28
pktbuilder
2015-09-06
Mysql 5.0.95.zip
2013-09-01
Linux内核0.11(0.95)完全注释
2011-10-11
%p打印结构体对象出问题
2017-11-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人