📄 nstr2bcd.cpp
字号:
// Nstr2BCD.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "string.h"
#define RIGHT_ALIGN 1 //右结合
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
函数名: Nstr2BCD
功能: 把一个ASCII数字转换成一串8421BCD码。
参数: [in]NStr,待转换的数字串;
[in]NLen,待转换的数字串长度;
[out]BCDsb,存储8421BCD码。
[in]align,结合方式:
1,表示右结合。
其它,表示左结合。
返回值:成功,返回BCD串长;失败,返回-1。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
int Nstr2BCD(void *NStr, int NLen, char *BCDsb, int align)
{
int i, j, n;
char *sn = (char * )NStr;
// NLen = 5;//strlen(sn);
n = (NLen + 1) / 2; //BCD码串长
if(align == RIGHT_ALIGN) //有结合
{
for(i = NLen - 1, j = n - 1; j >= 0; j--)
{
if(i >= 0)
{
if(sn[i] < '0' || sn[i] > '9')
return -1;
BCDsb[j] = sn[i] - '0';
i--;
}
if(i >= 0)
{
if(sn[i] < '0' || sn[i] > '9')
return -1;
BCDsb[j] = (sn[i] - '0') << 4 | BCDsb[j];
i--;
}
}
}
else //左结合
{
for(i = 0, j = 0; i < NLen; i++, j++)
{
if(sn[i] < '0' || sn[i] > '9')
return -1;
BCDsb[j] = (sn[i] - '0') << 4;
i++;
if(i < NLen)
{
if(sn[i] < '0' || sn[i] > '9')
return -1;
BCDsb[j] = BCDsb[j] | (sn[i] - '0');
}
}
}
return n;
}
int main(int argc, char* argv[])
{
char strConv[10];
char strConved[128];
sprintf(strConv,"%s","36974");
Nstr2BCD(strConv,strlen(strConv),strConved,1);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -