⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bigendian.h

📁 一个简单而且快速的无损压缩算法。包含源代码实现
💻 H
字号:
#ifndef __BIGENDIAN_H
#define __BIGENDIAN_H

/* funkcje zalezne od Endianness maszyny; sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */

/* funkcje pomocnicze do operacji na liczbach Big Endian do 32b */
/* funkcje operujace na plikach BEread.../BEwrite... potencjalnie wolne */
/* funkcje operujace wierszach pikseli sprawdzaja endianness maszyny, szybkie */

/* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */
/* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian  */
/* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */

#include "cdftypes.h"
#include <stdio.h>


/* sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */
/* dotyczy calego kompresora, nie tylko tego modulu */
/* zwraca 0-ok, >=1 blad */
int CheckAssumptions();

/* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */
/* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian, sprawdzane przez assert w BEmachine() */

/* #define BE_MACHINE /**/

/* zapisz pod adres adr slowo towrite w kolejnosci BigEndian */
/* adr moze byc dowolnym wyrazeniem typu wskaznikowego */
/* towrite powinno byc 32-bitowa zmienna lub stala */
/* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */
#ifdef BE_MACHINE

#define BE_STORE_WORD(adr, towrite)				\
			*(unsigned int *)(adr)=(towrite)

#define BE_LOAD_WORD(adr, toread)				\
			(toread)=*(unsigned int *)(adr)

#else

#define BE_STORE_WORD(adr, towrite)				\
			{									\
				BYTE * const bp=(BYTE *)(adr);	\
				bp[0]=(BYTE)((towrite)>>24);	\
				bp[1]=(BYTE)((towrite)>>16);	\
				bp[2]=(BYTE)((towrite)>>8);		\
				bp[3]=(BYTE)(towrite);			\
			}

#define BE_LOAD_WORD(adr, toread)						\
			{											\
				const BYTE * const bp=(BYTE *)(adr);	\
				(toread)= (((unsigned int)bp[0])<<24)	\
						| (((unsigned int)bp[1])<<16)	\
						| (((unsigned int)bp[2])<<8)	\
						|  ((unsigned int)bp[3]);		\
			}

#endif

/* zwroc endianness maszyny 1-BigEndian, 0-Little */
int BEmachine();

/* endian-aware*/
/* zamienia wczytane z pliku piksele BigEndian rawBYTESpp Bajtow/piksel (1 lub 2), */
/* na ActualEndian sizeof(PIXEL) Bajtow/piksel */
/* width- liczba pikseli */
void BErawrowtopixelrow(const BYTE * const filerow, PIXEL * const currow, const int width, const int rawBYTESpp);

/* operacja odwrotna do BErawrowtopixelrow*/
void BEpixelrowtorawrow(BYTE * const filerow, const PIXEL * const currow, const int width, const int rawBYTESpp);

/* zapisz do pliku liczbe 16-bitowa w formacie BigEndian*/
/* zwroc EOF jak blad */
int BEwrite2Bytes(int val, FILE *f);

/* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/
int BEread2Bytes(FILE *f);

/* zapisz do pliku liczbe 32-bitowa w formacie BigEndian*/
/* zwroc EOF jak blad */
int BEwrite4Bytes(int val, FILE *f);

/* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/
int BEread4Bytes(FILE *f);


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -