📄 octetstring.c
字号:
#include "package.h"
/* Package macsorts */
/*******************************************************************
* OCTET sort (influenced by Z.105, Annex A)
*******************************************************************/
/* Octet is a subtype of Bitstring where length always =8. */
/* Z.105 adds a "size" keyword to SDL and defines Octet with */
/* "... constants size (8) ..." to impose this length constraint. */
/* Here Octet relies on proper use maintain lengths as multiples */
/* of 8. Proper length strings are created by the hexadecimal */
/* Bitstring literals (e.g. 0xD5) and operator mkOctet: */
/* o:= mkOctet(i) converts a non-negative Integer (mod 256) */
/* to an Octet (exactly 8 bits) */
/* i:= octetVal(o) converts an Octet to an Integer (0:255) */
/* o:= flip(o) reverses bit order of the Octet */
/* (0<-->7, 1<-->6, 2<-->5, 3<-->4) */
INT8U mkOctet(Integer val)
{
INT8U result=0;
result=val%256;
return (result);
}
INT8U flip(INT8U val)
{
INT8U i,result=0;
for (i=0;i<8;i++)
{
if ( val & (0x80>>i))
result |= (0x01 << i);
}
return (result);
}
Integer octetVal(INT8U val)
{
return (Integer)val;
}
/*******************************************************************
* OCTET STRING sort (somewhat influenced by Z.105, Annex A)
*******************************************************************/
/* Octetstrings are 0-ORIGIN strings of Octet, NOT 1-ORIGIN */
/* strings like Octet_String in Z.105 (hence the name change). */
/* Octetstring has conversion operators to and from Bitstring, */
/* and integer to Octetstring. Octetstring literals are "null" */
/* mkOS(i1,i2) returns */
/* mkstring(mkOctet(i1)) padded (0x00) to length i2 */
void mkOS (Integer i, Integer k, Octetstring *os)
{
Integer j;
os->ptr[0] = mkOctet(i);
for (j = 1; j < k; j++)
{
os->ptr[j] = 0;
}
}/* 函数结果通过os来传递,通过定义一个数组,并将os的ptr指向该数组来使用此函数。*/
/* 16-bit int to 2-octets */
void mk2octets(Integer i, Octetstring *oct)
{
oct->ptr[0] = i%256;
oct->ptr[1] = i/256;
oct->length = 2;
}/* 函数结果通过oct来传递 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -