CN1414480A - 于不同平台间存取任意位范围的数据的方法 - Google Patents
于不同平台间存取任意位范围的数据的方法 Download PDFInfo
- Publication number
- CN1414480A CN1414480A CN 02150390 CN02150390A CN1414480A CN 1414480 A CN1414480 A CN 1414480A CN 02150390 CN02150390 CN 02150390 CN 02150390 A CN02150390 A CN 02150390A CN 1414480 A CN1414480 A CN 1414480A
- Authority
- CN
- China
- Prior art keywords
- data
- write
- bit
- shift
- bytes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 148
- 238000006073 displacement reaction Methods 0.000 claims abstract description 84
- 238000013500 data storage Methods 0.000 claims abstract description 43
- 230000000873 masking effect Effects 0.000 claims description 40
- 238000004364 calculation method Methods 0.000 claims description 16
- 238000006243 chemical reaction Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 15
- 238000007796 conventional method Methods 0.000 description 5
- 230000033001 locomotion Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种于不同平台间存取任意位范围的数据的方法,其主要通过一数据储存区中欲存取数据的位范围的起始与结束位的实际储存地址,而自动计算得到一第一与第二位移量,且对应该第一与第二位移量以将欲读出或写入该欲存取数据的位范围中的位数据,进行一相反方向的读取位移动作,完成一读取或写入程序;通过本发明的方法,可解决因不同系统平台间储存数据格式的差异,致使不易存取任意位范围的数据的问题。
Description
技术领域
本发明涉及一种存取位数据的方法,尤指一种可于不同的系统运作环境间,进行跨平台存取任意位范围的数据的方法。
背景技术
在以数字数据为运作标的的数字系统(例如,计算机系统或网络通讯系统等等)中,为了执行一些特定工作并考虑到能节省内存的储存空间,往往会将某些常用的参数、控制数据或地址等等数字数据,予以集中并储存于一特定的数据储存区内,供随时参考或运用。其中,该数据储存区可为一以数组(array)的数据结构形式,连续储存数组数据字节。
请参阅图1,其为一数字系统(图未示出)中所包括可储存数组数据字节数据储存区110的示意图;且,图1所示的数据储存区10系共包括有三组数据字节(bytes):B11、B12、B13。即,每一个单一数据字节的位数量为8个位,故该三组数据字节B11~B13共计有24个位(bit)(图1中标示为0~23)。当然,每个位也有其相应的储存地址(图1中标示为(0)~(23))。
于实际的运用上而言,该24个位予以区分成五组位数据域位101~105,以分别储存五种具有不同用途的位数据。其中,第一位数据域位101包括有bit 0~bit 3等4个位、第二位数据域位102包括有bit 4~bit 9等6个位、第三位数据域位103包括有bit 10~bit 16等7个位、第四位数据域位104包括有bit 17~bit 18等2个位、第五位数据域位105则包括有bit 19~bit23等5个位。
由于该数字系统都是以字节(byte)为储存的基本单位,因此,如欲自该三组数据字节B11~B13中对该五个位数据域位101~105分别进行读取或写入,且如果所欲存取的特定位数据域位的位数目并非刚好等于8个位时,势必要以一特定的读取与写入数据的方法,来进行位位移(shift)与进行一与门/或门逻辑运算,如此,方可自该三组数据字节B11~B13中取出特定位并组成所需要的数据。例如:
该第一位数据域位101=数据字节B11&0x0F;
该第二位数据域位102=((数据字节B12&0x03)<<4)|((数据字节B11&0xF0)>>4);
该第三位数据域位103=((数据字节B13&0x01)<<6)|((数据字节B12&0xFC)>>2);
该第四位数据域位104=(数据字节B13&0x06)>>1;
该第五位数据域位105=(数据字节B13&0xF8)>>3;
其中,0x0F、0x02、0xF0、0x01、0xFC、0x06、0xF8:都为以十六进制表示法所表示的8个位数据,且都作为一屏蔽(mask)数据使用;
X&Y:为将数据X与Y进行一与门逻辑运算;
X|Y:为将数据X与Y进行一或门逻辑运算;
X>>Y:为将数据X向右位移Y单位,且其中Y为一位移数据;
X<<Y:为将数据X向左位移Y单位,且其中Y为一位移数据。
上述现有进行该特定的读取与写入数据的方法的缺点在于,其中所使用到的这些屏蔽数据与这些位移量,都为一固定值,其并无法自动或动态地对应各位数据域位实际所储存规格的变动而有所调整;例如,当该数字系统更改为以两个或四个字节为一基本储存单元以储存该三组数据字节B11~B13时,前述这些屏蔽数据与位移量,倘若未能同步地以人工方式逐一予以更改,其无法读取或写入正确的位数据。
为改善上述现有做法的缺陷,现有另一种数据的读取或写入方式,改为直接以位操作的概念来进行数据的读取或写入。特别是针对该数据储存区10中的五个位数据域位101~105,在逻辑上,首先分别予以定义出所使用的位数量,且各位数据域位间有先后相邻的储存关系。尔后,于进行读取或写入各位数据域位时,仅需针对各位数据域位所事先宣告涵盖的位范围进行独立的读取或写入,即可不必再使用到前述现有技术所使用的这些屏蔽数据与这些位移量。举例而言,将该数据储存区10予以宣告为一结构式数组(structure array)的数据结构形式,且在逻辑上,各依序相邻储存的位数据字段于该数据储存区10中所需使用的位数量分别宣告如下:
该第一位数据域位101需要使用4个bits;
该第二位数据域位102需要使用6个bits;
该第三位数据域位103需要使用7个bits;
该第四位数据域位104需要使用2个bits;
该第五位数据域位105需要使用5个bits。
对于上述宣告为结构式数组数据结构形式的该数据储存区10而言,在实际储存做法中,该数字系统并未真正提供一块实际且连续的存储区块,以使这些位数据能相邻地储存于一起,而由该数字系统以其所能提供的基本储存格式来储存的。举例而言,请参阅图2(a),其为以两个字节(总计有(0)~(15)等共16个位)为一个基本储存单元来储存该数据储存区10的实际储存示意图。于图2(a)中(并请配合图1),因该第一~第三位数据域位101~103所涵盖的位范围共有17个位数据,其显然已超过一个基本储存单元所能提供的储存位数量(16个位),因此,该数字系统仅会将该第一与第二位数据域位101、102用第一个基本储存单元BX0来储存的,剩下的位数据域位103~105,则以第二基本储存单元BX1来进行储存。如此一来,该第一与第二位数据域位101、102所涵盖的位数据显然无法与该第三~第五位数据域位103~105所涵盖的位数据相邻地储存于一起,此也将使得后续于进行读取或写入时,无法取得到正确的位数据。
现有进行位数据的读取或写入的方法,尚有一项严重的问题,即其并未考虑到不同的系统平台彼此间所使用的字节顺序(endian)并不相同,以致未予以实施不同的处理。例如,以80x86 CPU为核心的数字系统为例,其较低字节数据储存于较低地址上,因此,其字节顺序称为little endian。此等情形,请配合参阅图2(b)所示的以little endian位顺序储存字节的示意图即可明了。换言之,图2(b)中所示的三个基本储存单元(各有16个位)BL、BM、BH,其中最低字节数据BL储存于最低储存地址((0)~(7)),且最高字节数据BM系储存于最高储存地址((16)~(23))。
另一方面,以ARM CPU或8051单芯片为核心的数字系统为例,其较低字节数据则储存于较高储存地址上,因此其字节顺序即称为big endian。此等情形,也请配合参阅图2(c)所示的以big endian位顺序储存字节的示意图即可明了。换言之,图2(c)中所示的三个基本储存单元(各有16个位)BL、BM、BH,其中最低字节数据BL系储存于最高储存地址((16)~(23)),且最高字节数据BM系储存于最低储存地址((0)~(7))。
因此,现有进行数据位的读取或写入的方法,对于不同的系统平台并不具备不同的处理能力,将其适用至具有不同字节储存顺序的系统后,即无法正确地读取或写入所需的位数据。
发明内容
本发明的主要目的,在于提供一种可于不同平台间,不必以人工方式逐一更改所使用的屏蔽数据与位移量的存取任意位范围的数据的方法。
本发明的另一目的,在于提供一种可于具有不同字节储存顺序的不同平台间,存取任意位范围的数据的方法。
本发明公开一种于不同平台间存取任意位范围的数据的方法,包括下列步骤:选择一数据储存区中欲存取数据的位范围;其中,该数据储存区包括数组数据字节,且该欲存取数据的位范围系至少包括一数据位;对应该数据位的储存地址,以自动计算得到一第一与第二位移量;以及对应一存取指令处于一读取模式或一写入模式,以分别对该欲存取数据的位范围进行一读取程序或一写入程序;其中,于进行该读取程序时,可分别对应该第一与第二位移量以将该欲存取数据的位范围中的数据字节分别进行一相反方向的读取位移动作,并予以合并形成一读取数据;而于进行该写入程序时,可分别对应该第一与第二位移量以将一写入数据中的数据字节进行一相反方向的写入位移动作,且将该相反方向的位移结果合并并写入该欲存取数据的位范围中。
依据本发明上述的构想,其中该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区。
依据本发明上述的构想,其中该数据位为该欲存取数据的位范围中的起始数据位,且单一数据字节的位数量为8个位。
依据本发明上述的构想,其中该第一位移量的计算公式可为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中该第二位移量的计算公式可为:
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中于该读取程序中,该欲存取数据的位范围中任两相邻数据字节其储存地址较低的数据字节以及储存地址较高的数据字节,分别对应该第一与第二位移量,以进行一第一与第二方向位移动作。
依据本发明上述的构想,其中该第一与第二方向位移动作分别为一向右与向左位移动作。
依据本发明上述的构想,其中该欲存取数据的位范围更包括有一结束数据位,且包括有该结束数据位在内的最后一组数据字节,可予以进行一屏蔽(mask)步骤或进行该向右位移动作,以清除不需被读取的额外数据位并得到该最后一组读取数据字节。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF>>(8-(该结束数据位的储存地址—该起始数据位的储存地址+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位。
依据本发明上述的构想,其中分别进行完成该第一与第二方向位移动作的该任两相邻数据字节,系以一逻辑运算进行合并成为该读取数据中的一特定数据字节。
依据本发明上述的构想,其中该逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于进行该写入程序时,如该欲存取数据的位范围少于或等于单一数据字节的位数量时,可进行一第一清除及写入程序。
依据本发明上述的构想,其中该欲存取数据的位范围更包括一结束数据位。
依据本发明上述的构想,其中于该第一清除及写入程序中,可进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~((0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址))<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中于该第一清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据&(0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址)))<<该第一位移量;
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节为该写入数据中的第一组写入数据字节时,可对应该第一位移量,以进行一第二清除及写入程序。
依据本发明上述的构想,其中该欲存取数据的位范围更包括一结束数据位。
依据本发明上述的构想,其中于该第二清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~(0xFF<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中于该第二清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=该写入数据<<该第一位移量;
其中,X<<Y:为将数据X向左位移Y单位。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节为该写入数据中的最后一组写入数据字节时,可对应该第一与第二位移量,以进行一第三清除及写入程序。
依据本发明上述的构想,其中该欲存取数据的位范围更包括一结束数据位。
依据本发明上述的构想,其中于该第三清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF<<(该结束数据位的储存地址除以8后所得的余数+1);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位。
依据本发明上述的构想,其中于该第三清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=((该写入数据中的最后一组写入数据字节<<该第一位移量)|(该写入数据中的倒数第二组写入数据字节>>该第二位移量))&~(0xFF<<(该结束数据位的储存地址除以8后所得的余数+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节系非为该写入数据中的第一组写入数据字节或最后一组写入数据字节时,可对应该第一与第二位移量,以进行一第四清除及写入程序。
依据本发明上述的构想,其中该欲存取数据的位范围更包括一结束数据位。
依据本发明上述的构想,其中于该第四清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0x0;
其中,0x0:为以十六进制表示法表示8个为0的位数据。
依据本发明上述的构想,其中于该第四清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据中的后一组写入数据字节<<该第一位移量)|(该写入数据中的前一组写入数据字节>>该第二位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X|Y:将数据X与Y执行或门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于该读取程序中,可进行一字节次序转换动作,以使该读取数据中的字节以不同的字节顺序(byte endian)进行储存。
依据本发明上述的构想,其中该读取数据中的字节顺序可为一将较低字节数据储存于较低储存地址的字节顺序(little endian),抑或为一将较低字节数据储存于较高储存地址的字节顺序(big endian)。
依据本发明上述的构想,其中于进行该写入程序之前以及将合并后的该位移结果写入该欲存取数据的位范围之前,系都可进行一字节次序转换动作,以改变该写入数据或合并后的该位移结果中的字节顺序(byte endian)。
依据本发明上述的构想,其中该写入数据或合并后的该位移结果中的字节顺序,可为一将较低字节数据储存于较低储存地址的字节顺序(littleendian),抑或为一将较低字节数据储存于较高储存地址的字节顺序(bigendian)。
另一方面,本发明也系关于一种于不同平台间读取任意位范围的数据的方法,包括下列步骤:选择一数据储存区中欲读取数据的位范围;其中,该数据储存区包括数组数据字节,且该欲读取数据的位范围系至少包括一数据位;对应该数据位的储存地址,以自动计算得到一第一与第二位移量;对应该第一位移量,以将包括有该数据位在内的第一组数据字节,予以进行一第一方向的位移动作,并储存成一第一方向位移数据字节;对应该第二位移量,以将与该第一组数据字节相邻的第二组数据字节,予以进行一第二方向的位移动作,并储存成一第二方向位移数据字节;合并该第一与第二方向位移数据字节,以形成第一组读取数据字节;以及重复对应该第一与第二位移量,以依序将前一组数据字节与相邻的后一组数据字节,分别进行该第一与第二方向的位移动作且将位移的结果合并,并直至完成读取与形成最后一组读取数据字节为止。
依据本发明上述的构想,其中该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区。
依据本发明上述的构想,其中该数据位为该欲读取数据的位范围中的起始数据位,且单一数据字节的位数量为8个位。
依据本发明上述的构想,其中该第一位移量的计算公式可为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中该第二位移量的计算公式可为:
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中该前一组数据字节为储存地址较低的数据字节,且与其相邻的该后一组数据字节为储存地址较高的数据字节。
依据本发明上述的构想,其中该第一与第二方向位移动作分别为一向右与向左位移动作。
依据本发明上述的构想,其中该欲存取数据的位范围更包括有一结束数据位,且包括有该结束数据位在内的最后一组数据字节,可予以进行一屏蔽(mask)步骤或进行该向右位移动作,以清除不需被读取的额外数据位并得到该最后一组读取数据字节。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF>>(8-(该结束数据位的储存地址—该起始数据位的储存地址+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位。
依据本发明上述的构想,其中分别进行完成该第一与第二方向位移动作的该任两相邻数据字节,系以一逻辑运算进行合并成为该读取数据中的一特定数据字节。
依据本发明上述的构想,其中该逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中由该第一组读取数据字节至该最后一组读取数据字节所形成的数组读取数据字节,可进行一字节次序转换动作,以使该数组读取数据字节以不同的字节顺序(byte endian)进行储存。
依据本发明上述的构想,其中该数组读取数据字节中的字节顺序可为一将较低字节数据储存于较低储存地址的字节顺序(little endian),抑或为一将较低字节数据储存于较高储存地址的字节顺序(big endian)。
再则,本发明也系关于一种于不同平台间写入任意位范围的数据的方法,包括下列步骤:选择一数据储存区中欲写入数据的位范围;其中,该数据储存区包括数组数据字节,且该欲写入数据的位范围系至少包括一数据位;对应该数据位的储存地址,以自动计算得到一第一与第二位移量;判断该欲写入数据的位范围是否少于或等于单一数据字节的位数量,如为是时,对应一写入数据、该第一或第二位移量,以进行一第一清除及写入程序,否则,进行下一步骤;输入该写入数据中的第一组写入数据字节,并对应该第一或第二位移量,以进行一第二清除及写入程序;以及输入并判断该写入数据中的下一组写入数据字节是否为该写入数据中的最后一组写入数据字节,如为是时,对应该最后一组写入数据字节与倒数第二组写入数据字节、该第一与第二位移量,以进行一第三清除及写入程序,否则,输入并对应该写入数据中相邻之前、后两组数据字节、该第一与第二位移量,以进行一第四清除及写入程序,且直至输入该最后一组写入数据字节,并进行完成该第三清除及写入程序为止。
依据本发明上述的构想,其中该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区。
依据本发明上述的构想,其中该数据位为该写入取数据的位范围中的起始数据位,且单一数据字节的位数量为8个位。
依据本发明上述的构想,其中该第一位移量的计算公式可为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中该第二位移量的计算公式可为:
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
依据本发明上述的构想,其中前一组写入数据字节为储存地址较低的数据字节,且与其相邻的后一组写入数据字节为储存地址较高的数据字节。
依据本发明上述的构想,其中该欲写入数据的位范围更包括一结束数据位。
依据本发明上述的构想,其中于该第一清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~((0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址))<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中于该第一清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据&(0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址)))<<该第一位移量;
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于该第二清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~(0xFF<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中于该第二清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=该写入数据<<该第一位移量;
其中,X<<Y:为将数据X向左位移Y单位;
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于该第三清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF<<(该结束数据位的储存地址除以8后所得的余数+1);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位。
依据本发明上述的构想,其中于该第三清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=((该写入数据中的最后一组写入数据字节<<该第一位移量)|(该写入数据中的倒数第二组写入数据字节>>该第二位移量))&~(0xFF<<(该结束数据位的储存地址除以8后所得的余数+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于该第四清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围。
依据本发明上述的构想,其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0x0;
其中,0x0:为以十六进制表示法表示8个为0的位数据。
依据本发明上述的构想,其中于该第四清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围。
依据本发明上述的构想,其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据中的后一组写入数据字节<<该第一位移量)|(该写入数据中之前一组写入数据字节>>该第二位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X|Y:将数据X与Y执行或门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
依据本发明上述的构想,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
依据本发明上述的构想,其中于输入该写入数据之前,以及于该写入数据进行完成该第一~第四清除及写入程序的后,都可进行一字节次序转换动作,以改变该写入数据或进行完成该第一~第四清除及写入程序的后的结果中的字节顺序(byte endian)。
依据本发明上述的构想,其中该写入数据或进行完成该第一~第四清除及写入程序的后的结果中的字节顺序,可为一将较低字节数据储存于较低储存地址的字节顺序(little endian),抑或为一将较低字节数据储存于较高储存地址的字节顺序(big endian)。
本发明通过下列附图及详细说明得以更深入的了解。
附图说明
图1为可储存数组数据字节的数据储存区示意图;
图2(a)为以两个字节(总计有(0)~(15)等共16个位)为一个基本储存单元来储存该数据储存区10的实际储存示意图;
图2(b)为以little endian位顺序储存字节的示意图;
图2(c)为以big endian位顺序储存字节的示意图;
图3(a)、(b)为以本发明进行读取任意位范围的数据的一较佳实施方法的流程示例图;
图4(a)、(b)为自数据储存区中进行读取位数据域位的实际操作流程示例图;
图4(c)为该读取数据的储存示例图;
图5(a)、(b)为以本发明进行写入任意位范围的数据的一较佳实施方法的流程示例图;
图6(a)、(b)为将一写入数据写入数据储存区中的实际操作流程示例图。所包括的各符号列示如下:
图1:
数据储存区 10 位数据域位101~105
数据字节B11、B12、B13 24个位数据编号0~23
数据字节中各位相对应的储存地址(0)~(23)
图2:
基本储存单元(各有16个位)BL、BM、BH
具16个储存位数量的第一与第二个基本储存单元BX0、BX1
图3~图4:
数据储存区20 数据字节B21、B22
读取位数据域位201
第一~第三位移数据字节T21~T23
第一及第二读取数据字节R21、R22
屏蔽动作M 向右、向左位移动作R1、L1
或门逻辑运算01
图5~图6:
另一数据储存区30 数据字节B31、B32
第一~第四位移数据字节T21~T24
第一及第二写入数据字节R31、R32
写入动作S 向右、向左位移动作R2、L2
或门逻辑运算02
具体实施方式
为说明本发明读取或写入任意位范围的实施方法,首先请参阅图3(a)、(b),其为以本发明进行读取任意位范围的数据的一较佳实施方法的流程示例图。其详细读取步骤如下所述:
步骤(a1):开始。
步骤(b1):选择一数据储存区中欲读取数据的位范围;其中,该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区,且该欲读取数据的位范围至少包括一起始数据位与一结束数据位,且单一数据字节的位数量为8个位。
步骤(c1):对应该起始数据位的储存地址,自动计算得到一第一与第二位移量;
其中,该第一位移量的计算公式可为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数;且
该第二位移量的计算公式可为:
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
步骤(d1):对应该第一位移量,以将包括有该数据位在内的第一组数据字节,予以进行一向右位移动作,并储存成一向右位移数据字节。
步骤(e1):对应该第二位移量,以将与该第一组数据字节相邻的第二组数据字节,予以进行一向左位移动作,并储存成一向左位移数据字节。
步骤(f1):合并该向右与向左位移数据字节,以形成第一组读取数据字节。
步骤(g1):重复对应该第一与第二位移量,以依序将前一组数据字节与相邻的后一组数据字节,分别进行该向右与向左位移动作且将位移的结果合并,并直至完成读取与形成最后一组读取数据字节为止。
其中,该前一组数据字节为储存地址较低的数据字节,且与其相邻的该后一组数据字节为储存地址较高的数据字节。
另外,当包括有该结束数据位在内的最后一组数据字节于对应该第一位移量,以进行该向右位移动作后,可予以进行一屏蔽(mask)步骤,以清除不需被读取的额外数据位并得到该最后一组读取数据字节。
当然,该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF>>(8-(该结束数据位的储存地址—该起始数据位的储存地址+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位。
又,于上述分别进行完成该向右与向左位移动作的该任两相邻数据字节,系以一或门逻辑运算进行合并成为该读取数据中的一特定数据字节。
步骤(h1):结束。
当然,为更进一步理解图3(a)、(b)所示进行读取位数据的较佳实施流程,现配合一较佳实例予以说明。请配合参阅图4(a)、(b),其为自数据储存区中进行读取位数据域位的实际操作流程示例图。
于图4(a)中,储存有两组数据字节B21、B22的数据储存区20,其包括了一读取位数据域位201(计有bit3~bit12等共10个位数量),其即是欲读取数据的位范围。换言之,依图3所示的该步骤(c1)可知,通过起始数据位bit3的储存地址(3),可自动计算得到一第一及第二位移量:3及5,其表示于后续对该两组数据字节B21、B22进行该向右、向左位移动作R1、L1时,所需位移的数量。以图4(a)为例,当该两组数据字节B21、B22分别进行该向右、向左位移动作R1、L1后,可分别得到一第一与第二位移数据字节T21、T22,以表示该数据字节B21进行向右位移3个地址,且该数据字节B22进行向左位移5个地址的位移结果。
再则,将该第一与第二位移数据字节T21、T22通过进行一或门逻辑运算01,即可合并成为一读取数据中的一第一读取数据字节R21。于该第一读取数据字节R21中可得知,该欲读取数据的位范围内的部分位数据:bit3~bit10,已由单一字节所储存的。
紧接着,依图4(b)所示,由于该数据字节B22中尚存有该欲读取数据的两个位数据:bit11、bit12,且该数据字节B22为与该数据字节B21相邻的后一组数据字节,并为该数据储存区20中的最高字节,因此,该数据字节B22仅须进行该向右位移动作R1,即可得到一第三位移数据字节T23(于其储存地址(0)、(1)中分别储存有bit11、b12)。
由于该第三位移数据字节T23中储存地址(2)~(4)所储存的位数据,并非在该欲读取数据的位范围内,所以,通过该步骤(g1)中所公开的该屏蔽数据以进行一屏蔽动作M,即可得到该读取数据中的一第二读取数据字节R22。另外,于本较佳实施例中,需值得特别注意的是:由于进行该屏蔽动作M时,该屏蔽动作M所欲运算的数据字节,属于该数据储存区20中第二个数据字节,因此,于该步骤(g1)所公开该屏蔽数据中所示的“该起始数据位的储存地址”,应改以11带入公式进行计算才正确。其中,11的由来,为该欲读取数据的位范围中的起始数据位的储存地址(3),再加上8(意指相隔8个位)而得到。
当然,依图4(c)所示该读取数据的储存示例图应可知,由该第一组与第二组读取数据字节R21、R22所形成的该读取数据,可进行一字节次序转换动作,以使该读取数据可对应不同的作业平台,而改以不同的字节顺序(byteendian)来进行储存。
另一方面,再请参阅图5(a)、(b),其为以本发明进行写入任意位范围的数据的一较佳实施方法的流程示例图。其详细读取步骤如下所述:
步骤(a2):开始。
步骤(b2):选择一数据储存区中欲写入数据的位范围;其中,该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区,且该欲写入数据的位范围至少包括一起始数据位与一结束数据位,且单一数据字节的位数量为8个位。
步骤(c2):对应该数据位的储存地址,以自动计算得到一第一与第二位移量;其中,该第一位移量的计算公式可为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数;且
该第二位移量的计算公式可为:
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
步骤(d2):判断该欲写入数据的位范围是否少于或等于8个位数量,如为是时,对应一写入数据、该第一或第二位移量,以进行一第一清除及写入程序,并执行该步骤(g2),否则,进行下一步骤;
其中,于该第一清除及写入程序中,可进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围,且进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~((0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址))<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
当然,于该第一清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围,且该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据&(0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址)))<<该第一位移量;
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算。
另外,于该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
步骤(e2):输入该写入数据中的第一组写入数据字节,并对应该第一位移量,以进行一第二清除及写入程序;
其中,于该第二清除及写入程序中,可进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围,且于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~(0xFF<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算。
当然,于该第二清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围,且其中该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=该写入数据<<该第一位移量;
其中,X<<Y:为将数据X向左位移Y单位;
另外,该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
步骤(f2):输入并判断该写入数据中的下一组写入数据字节是否为该写入数据中的最后一组写入数据字节,如为是时,对应该最后一组写入数据字节与倒数第二组写入数据字节、该第一与第二位移量,以进行一第三清除及写入程序,并执行该步骤(g2),否则,输入并对应该写入数据中相邻的前、后两组数据字节、该第一与第二位移量,以进行一第四清除及写入程序,且直至输入该最后一组写入数据字节,并进行完成该第三清除及写入程序为止。
其中,前一组写入数据字节为储存地址较低的数据字节,且与其相邻的后一组写入数据字节为储存地址较高的数据字节。
又,于该第三清除及写入程序中,可进行一屏蔽(mask)步骤,以清除该欲写入数据的位范围中特定的位范围,且于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF<<(该结束数据位的储存地址除以8后所得的余数+1);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位。
当然,其中于该第三清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围,且该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=((该写入数据中的最后一组写入数据字节<<该第一位移量)|(该写入数据中的倒数第二组写入数据字节>>该第二位移量))&~(0xFF<<(该结束数据位的储存地址除以8后所得的余数+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
至于该位移与写入步骤中所使用的写入逻辑运算,其可为一或门逻辑运算。
关于该第四清除及写入程序,其可进行一位移与写入步骤,以将该写入数据位移并写入该欲写入数据的位范围,且该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据中的后一组写入数据字节<<该第一位移量)|(该写入数据中的前一组写入数据字节>>该第二位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X|Y:将数据X与Y执行或门逻辑运算;
~Z:将数据Z执行反相逻辑运算。
当然,该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
步骤(g2):结束。
依本发明的较佳做法,于输入该写入数据之前,以及于该写入数据进行完成该第一~第四清除及写入程序的后,系都可进行一字节次序转换动作,以改变该写入数据或进行完成该第一~第四清除及写入程序的后的结果中的字节顺序(byte endian),俾适用于各种不同的作业平台。
为能更进一步理解图5(a)、(b)所示进行写入位数据的较佳实施流程,现配合一实例予以说明的。请配合参阅图6(a)、(b),其为将一写入数据写入数据储存区的实际操作流程示例图。
于图6(a)中,储存有两组数据字节B31、B32的另一数据储存区30,其包括了一写入位数据域位301(计有储存地址(3)~(12)等共10个储存地址数量),其为欲写入数据的位范围。另外,标示R31、R32者,分别为一写入数据中的第一组与第二组写入数据字节。
因该写入数据所包括的写入数据字节数量超过一个字节,因此,该第一组写入数据字节R31系直接进行图5中所示的该步骤(e2)中的该第二清除及写入程序。换言之,因该数据字节B31中有5个位储存空间(即储存地址(3)~(7))被包括于该欲写入数据的位范围301中,因此,该储存地址(3)~(7)必须先通过该步骤(e2)中所示的屏蔽数据,以清除位范围内的位数据,而且之后,该第一组写入数据字节R31再行通过该第二清除及写入程序中所示的屏蔽数据进行一向左位移动作L2,并得到一第一位移数据字节T31,最后,再进行一写入动作W(即进行一或门逻辑运算),以将该第一位移数据字节T31写入该数据字节B31中。
再请参阅图6(b),由于该第二组写入数据字节R32,为该写入数据中的最后一组数据字节,因此,将该第二组写入数据字节R32与该第一组写入数据字节R3 1直接进行图5中所示的该步骤(f2)中的该第三清除及写入程序。也即,因该写入数据字节B32中也有5个位储存空间被包括于该欲写入数据的位范围301中,因此,该欲写入数据的位范围301中的储存地址(8)~(12)必须先行通过该第三清除及写入程序中所示的屏蔽数据,以清除位范围内的位数据。
另外,依图5所示的该步骤(c2)可知,通过该欲写入数据的位范围301中起始储存地址(3),可自动计算得到一第一及第二位移量:3及5,其系表示于后续分别对该第二组与该第一组写入数据字节R32、R31分别进行向左、向右位移动作L2、R2时,所需位移的数量。以图6(b)为例,当该第二组与该第一组写入数据字节R32、R31分别进行该向左、向右位移动作L2、R2后,可分别得到一第三与第二位移数据字节T33、T32,以表示该第二组写入数据字节R32进行向左位移3个地址,且该第一组写入数据字节R31进行向右位移5个地址的位移结果。
再则,将该第三与第二位移数据字节T33、T32通过进行一或门逻辑运算02,即可合并成为欲写入该欲写入数据的位范围301中的一第四位移数据字节T34,最后,再进行该写入动作W(即进行一或门逻辑运算),以将该第四位移数据字节T34写入该数据字节B32中。
综上所述,本发明显然可于具有不同储存位数据格式或不同字节顺序(byte endian)的作业平台中,读取或写入任意位范围的数据。
Claims (10)
1.一种于不同平台间存取任意位范围的数据的方法,其特征在于,包括下列步骤:
选择一数据储存区中欲存取数据的位范围;其中,该数据储存区包括数组数据字节,且该欲存取数据的位范围系至少包括一数据位;
对应该数据位的储存地址,以自动计算得到一第一与第二位移量;以及
对应一存取指令处于一读取模式或一写入模式,以分别对该欲存取数据的位范围进行一读取程序或一写入程序;其中,于进行该读取程序时,可分别对应该第一与第二位移量以将该欲存取数据的位范围中的数据字节分别进行一相反方向的读取位移动作,并予以合并形成一读取数据;而于进行该写入程序时,可分别对应该第一与第二位移量以将一写入数据中的数据字节进行一相反方向的写入位移动作,且将该相反方向的位移结果合并并写入该欲存取数据的位范围中。
2.如权利要求1所述的于不同平台间存取任意位范围的数据的方法,其特征在于,该数据储存区可为一以数组(array)的数据结构形式,连续储存该数组数据字节的存储储存区,该数据位为该欲存取数据的位范围中的起始数据位,以及单一数据字节的位量为88个位;另外,该第一与该第二位移量的计算公式,可分别为:
该第一位移量=该起始数据位的储存地址除以8后所得的余数;
该第二位移量=8-该起始数据位的储存地址除以8后所得的余数。
2.如权利要求2所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于该读取程序中,该欲存取数据的位范围中任两相邻数据字节,其储存地址较低的数据字节以及储存地址较高的数据字节,分别对应该第一与第二位移量,以进行一第一与第二方向位移动作;其中该欲存取数据的位范围更包括有一结束数据位,且包括有该结束数据位在内的最后一组数据字节,可予以进行一屏蔽(mask)步骤或进行该向右位移动作,以清除不需被读取的额外数据位并得到该最后一组读取数据字节;其中于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF>>(8-(该结束数据位的储存地址—该起始数据位的储存地址+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位。
4.如权利要求2所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于进行该写入程序时,如该欲存取数据的位范围少于或等于单一数据字节的位数量时,可进行一第一清除及写入程序;而该欲存取数据的位范围更包括一结束数据位,且于该第一清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围;其中,于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~((0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址))<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算;
又,于该第一清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围;其中,该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据&(0xFF>>(7-该结束数据位的储存地址+该起始数据位的储存地址)))<<该第一位移量;
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算;
且,其中该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
5.如权利要求2所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节为该写入数据中的第一组写入数据字节时,可对应该第一位移量,以进行一第二清除及写入程序;而该欲存取数据的位范围更包括一结束数据位,且于该第二清除及写入程序中,进行一屏蔽(mask)步骤,以清除该欲存取数据的位范围中特定的位范围;其中,于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=~(0xFF<<该第一位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位;
~Z:将数据Z执行反相逻辑运算;
又,于该第二清除及写入程序中,可进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围;其中,该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=该写入数据<<该第一位移量;
其中,X<<Y:为将数据X向左位移Y单位;
另外,该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
6.如权利要求2所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节为该写入数据中的最后一组写入数据字节时,可对应该第一与第二位移量,以进行一第三清除及写入程序;而该欲存取数据的位范围更包括一结束数据位,且于该第三清除及写入程序中,进行一屏蔽步骤,以清除该欲存取数据的位范围中特定的位范围;其中,于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0xFF<<(该结束数据位的储存地址除以8后所得的余数+1);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X<<Y:为将数据X向左位移Y单位;
又,于该第三清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围;其中,该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=((该写入数据中的最后一组写入数据字节<<该第一位移量)|(该写入数据中的倒数第二组写入数据字节>>该第二位移量))&~(0xFF<<(该结束数据位的储存地址除以8后所得的余数+1));
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X&Y:将数据X与Y执行与门逻辑运算;
~Z:将数据Z执行反相逻辑运算;
另外,该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
7.如权利要求2所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于进行该写入程序时,如该欲存取数据的位范围大于单一数据字节的位数量,且所输入的数据字节系非为该写入数据中的第一组写入数据字节或最后一组写入数据字节时,可对应该第一与第二位移量,以进行一第四清除及写入程序;而该欲存取数据的位范围更包括一结束数据位,且于该第四清除及写入程序中,可进行一屏蔽步骤,以清除该欲存取数据的位范围中特定的位范围;其中,于进行该屏蔽步骤中所使用的屏蔽数据可为:
屏蔽数据=0x0;
其中,
0x0:为以十六进制表示法表示8个为0的位数据;
又,于该第四清除及写入程序中,进行一位移与写入步骤,以将该写入数据位移并写入该欲存取数据的位范围;其中,该位移与写入步骤中所得到的位移写入数据可为:
位移写入数据=(该写入数据中的后一组写入数据字节<<该第一位移量)|(该写入数据中的前一组写入数据字节>>该第二位移量);
其中,
0xFF:为以十六进制表示法表示8个为1的位数据;
X>>Y:为将数据X向右位移Y单位;
X<<Y:为将数据X向左位移Y单位;
X|Y:将数据X与Y执行或门逻辑运算;
~Z:将数据Z执行反相逻辑运算;
另外,该位移与写入步骤中所使用的写入逻辑运算可为一或门逻辑运算。
8.如权利要求1所述的于不同平台间存取任意位范围的数据的方法,其特征在于,于该读取程序中,可进行一字节次序转换动作,以使该读取数据中的字节以不同的字节顺序(byte endian)进行储存;且于进行该写入程序之前以及将合并后的该位移结果写入该欲存取数据的位范围之前,系都可进行一字节次序转换动作,以改变该写入数据或合并后的该位移结果中的字节顺序。
9.一种于不同平台间读取任意位范围的数据的方法,包括下列步骤:
选择一数据储存区中欲读取数据的位范围;其中,该数据储存区包括数组数据字节,且该欲读取数据的位范围系至少包括一数据位;
对应该数据位的储存地址,以自动计算得到一第一与第二位移量;
对应该第一位移量,以将包括有该数据位在内的第一组数据字节,予以进行一第一方向的位移动作,并储存成一第一方向位移数据字节;
对应该第二位移量,以将与该第一组数据字节相邻的第二组数据字节,予以进行一第二方向的位移动作,并储存成一第二方向位移数据字节;
合并该第一与第二方向位移数据字节,以形成第一组读取数据字节;以及
重复对应该第一与第二位移量,以依序将前一组数据字节与相邻的后一组数据字节,分别进行该第一与第二方向的位移动作且将位移的结果合并,并直至完成读取与形成最后一组读取数据字节为止。
10.一种于不同平台间写入任意位范围的数据的方法,包括下列步骤:
选择一数据储存区中欲写入数据的位范围;其中,该数据储存区包括数组数据字节,且该欲写入数据的位范围系至少包括一数据位;
对应该数据位的储存地址,以自动计算得到一第一与第二位移量;
判断该欲写入数据的位范围是否少于或等于单一数据字节的位数量,如为是时,对应一写入数据、该第一或第二位移量,以进行一第一清除及写入程序,否则,进行下一步骤;
输入该写入数据中的第一组写入数据字节,并对应该第一或第二位移量,以进行一第二清除及写入程序;以及
输入并判断该写入数据中的下一组写入数据字节是否为该写入数据中的最后一组写入数据字节,如为是时,对应该最后一组写入数据字节与倒数第二组写入数据字节、该第一与第二位移量,以进行一第三清除及写入程序,否则,输入并对应该写入数据中相邻的前、后两组数据字节、该第一与第二位移量,以进行一第四清除及写入程序,且直至输入该最后一组写入数据字节,并进行完成该第三清除及写入程序为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02150390 CN1198214C (zh) | 2002-11-11 | 2002-11-11 | 于不同平台间存取任意位范围的数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02150390 CN1198214C (zh) | 2002-11-11 | 2002-11-11 | 于不同平台间存取任意位范围的数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1414480A true CN1414480A (zh) | 2003-04-30 |
CN1198214C CN1198214C (zh) | 2005-04-20 |
Family
ID=4751807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02150390 Expired - Lifetime CN1198214C (zh) | 2002-11-11 | 2002-11-11 | 于不同平台间存取任意位范围的数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1198214C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100357871C (zh) * | 2005-06-30 | 2007-12-26 | 华为技术有限公司 | 一种支持外部存储器接口模式转换的装置和方法 |
CN105791385A (zh) * | 2015-01-08 | 2016-07-20 | 国际商业机器公司 | 用于控制两个或多个远程会话的方法和系统 |
-
2002
- 2002-11-11 CN CN 02150390 patent/CN1198214C/zh not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100357871C (zh) * | 2005-06-30 | 2007-12-26 | 华为技术有限公司 | 一种支持外部存储器接口模式转换的装置和方法 |
CN105791385A (zh) * | 2015-01-08 | 2016-07-20 | 国际商业机器公司 | 用于控制两个或多个远程会话的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN1198214C (zh) | 2005-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1120425C (zh) | 存储器控制器和存储器控制方法 | |
CN1185517C (zh) | 变焦透镜系统 | |
CN1320769C (zh) | 编码器、解码器以及数据传送系统 | |
CN1758084A (zh) | 变焦镜头系统 | |
CN1941616A (zh) | 差动放大器、数字模拟变换器以及显示装置 | |
CN1201519C (zh) | 数据一致性检测装置、数据一致性判断装置及数据挑选装置 | |
CN101044450A (zh) | 处理器 | |
CN1468006A (zh) | 图像处理设备和方法、图像显示设备以及移动电子装置 | |
CN1182415C (zh) | 可变焦距透镜 | |
CN1263042C (zh) | 读取电路、参考电路和半导体存储装置 | |
CN1776621A (zh) | 程序变换方法 | |
CN1022591C (zh) | 信号处理装置的地址处理器 | |
CN1178490C (zh) | 数据处理方法、数据处理装置 | |
CN1764928A (zh) | 多等级单色图像显示方法,多等级单色图像显示设备,计算机,单色显示设备,再转换适配器,和视频卡 | |
CN1905075A (zh) | 半导体存储器件 | |
CN1046406A (zh) | 数字调制方法 | |
CN1517742A (zh) | 变焦透镜系统 | |
CN1595807A (zh) | 能以数字量观测降压转换器输出的半导体集成电路 | |
CN1107908C (zh) | 汇编语言源程序生成方法和系统 | |
CN1198214C (zh) | 于不同平台间存取任意位范围的数据的方法 | |
CN100347668C (zh) | 指令变换装置 | |
CN1912830A (zh) | 定义面向对象模型的操作接口的方法 | |
CN1241121C (zh) | 运算装置和存储装置 | |
CN1667603A (zh) | 配置信息处理系统的方法和半导体集成电路 | |
CN1269048C (zh) | 存储装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20050420 |