?? bigendian.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 + -