os2ip及i2osp的實現

2021-04-15 11:45:16 字數 2534 閱讀 9419

.h檔案

#ifndef _mp_h

#define _mp_h

#define _reentrant

#include

#include

typedef unsigned char uint8_t;

typedef unsigned short uint16_t;

typedef unsigned int uint32_t; 

#define mp_wbits 32u

typedef uint8_t  byte;

typedef uint32_t mpw;

typedef uint16_t mphw;

#define mp_hwbits (mp_wbits >> 1)

#define mp_wbytes (mp_wbits >> 3)

#define mp_wnibbles (mp_wbits >> 2)

# define mp_words_to_bits(x) ((x) << 5)

# define mp_words_to_nibbles(x) ((x) << 3)

# define mp_words_to_bytes(x) ((x) << 2)

# define mp_bits_to_words(x) ((x) >> 5)

# define mp_nibbles_to_words(x) ((x) >> 3)

# define mp_bytes_to_words(x) ((x) >> 2)

#define mp_msbmask (((mpw) 0x1) << (mp_wbits-1))

#define mp_lsbmask  ((mpw) 0x1)

#define mp_allmask ~((mpw) 0x0)

#ifdef __cplusplus

extern "c"

#endif

#endif

.c 檔案

#include "o_i.h"

//#ifndef a**_mpzero

void mpzero(size_t size, mpw* data)

//#endif

//#ifndef a**_mpmszcnt

size_t mpmszcnt(size_t size, const mpw* data)

break;

}else

zbits += mp_wbits;

}return zbits;

}//#endif

//#ifndef a**_mpbits

size_t mpbits(size_t size, const mpw* data)

//#endif

int i2osp(byte *osdata, size_t ossize, const mpw* idata, size_t isize)

if (significant_bytes)

} while (significant_bytes);

#else

/* just copy data past zero bytes */

memcpy(osdata, ((byte*) idata) + (max_bytes - significant_bytes), significant_bytes);

#endif

}return 0;

}return -1;

}int os2ip(mpw* idata, size_t isize, const byte* osdata, size_t ossize)

required = mp_bytes_to_words(ossize + mp_wbytes - 1);

if (isize >= required)

if (b == 0)

b = mp_wbytes;

while (ossize--)

}return 0;

}return -1;

}int hs2ip(mpw* idata, size_t isize, const char* hsdata, size_t hssize)

while (hssize)

*(idata++) = w;

hssize -= chunk;

}return 0;

}return -1;

}//#ifndef a**_mpmultwo

int mpmultwo(size_t size, mpw* data)

return (int) carry;

}//#endif

//#ifndef a**_mpsetw

void mpsetw(size_t size, mpw* xdata, mpw y)

//#endif

測試檔案:

#include

#include "o_i.h"

void hexdump(byte* b, int count)

if (i & 0xf)

printf("/n");

}int main()

協同過濾I2I的簡單實現

基於物品的協同過濾是目前業界應用最多的演算法。可以通過下面公式定義物品的相似度 w i,j n i n j n i n j w frac wi,j n i n j n i n j 這裡,分母 n i n j n i cap n j n i n j 是同時喜歡物品i和物品j的的使用者數。為了減輕熱門物...

STM32的I2C特性及架構

軟體模擬協議 使用cpu直接控制通訊引腳 gpio 的電平,產生出符合通訊協議標準的邏輯。硬體實現協議 由stm32的i2c片上外設專門負責實現i2c通訊協議,只要配置好該外設,它就會自動根據協議要求產生通訊訊號,收發資料並快取起來,cpu只要檢測該外設的狀態和訪問資料暫存器,就能完成資料收發。這種...

實現鍊錶及相關的方法 2

思路 下面提供兩種方法,其實大同小異,但是因為鍊錶的最後乙個元素需要指向空,如果少了這個就會出現問題。所以在方法二中,遍歷的過程就將末尾指向空。方法一 將大的資料放在x的右邊,小的資料放在x的左邊 public listnode parttition int x else else else cur...