字符转换BCD码

mervyn832538 2010-09-15 05:16:36
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

void Asc2Bcd( bcd, asc, len, align )
unsigned char *bcd;
unsigned char *asc;
int len;
char align;
{
int i, flag = 0;
unsigned char ch;

memset(bcd, 0, (len + 1) / 2);

if ((len % 2) && align) flag = 1;

for (i = 0; i < len; i++) {
if (asc[i] >= 'a') ch = asc[i] - 'a' + 10;
else if (asc[i] >= 'A') ch = asc[i] - 'A' + 10;
else if (asc[i] >= '0') ch = asc[i] - '0';
else ch = 0;
if ((i + flag) % 2) bcd[(i + flag) / 2] |= (ch & 0x0F);
else bcd[(i + flag) / 2] |= (ch << 4);
}
}

int main()
{

unsigned char *bc;
const char *ac="12";
printf("__n_n__\n");
Asc2Bcd(bc,ac,16,0);
printf("__L_L__\n");
printf("__L_L__%s\n",ac);
}
在linux 系统环境中 编译没有错误,执行之后提示 段错误 (core dumped) ????为什么呢。
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MIFI007 2010-09-15
  • 打赏
  • 举报
回复
学习ing
justkk 2010-09-15
  • 打赏
  • 举报
回复
内存的问题
unsigned char *bc; // 没有分配空间
const char *ac="12"; // 指针指向只读区域了
Rainqin123 2010-09-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhao4zhong1 的回复:]
仅供参考

C/C++ code
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
unsigned int iv,i;
unsigned char BCD[5];//定长10位BCD码
unsigned char sv[11];
void main() {
iv=123456789;//最大10位无符号……
[/Quote]



赵兄C语言学得不错
赵4老师 2010-09-15
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
unsigned int iv,i;
unsigned char BCD[5];//定长10位BCD码
unsigned char sv[11];
void main() {
iv=123456789;//最大10位无符号正整数
//INT2BCD
sprintf(sv,"%010u",iv);
for (i=0;i<10;i+=2) {
BCD[i/2]=(sv[i]<<4)|(sv[i+1]&0x0F);
}
printf("BCD=%02x%02x%02x%02x%02x\n",BCD[0],BCD[1],BCD[2],BCD[3],BCD[4]);
//BCD2INT
for (i=0;i<10;i+=2) {
sv[i]='0'|(BCD[i/2]>>4);
sv[i+1]='0'|(BCD[i/2]&0x0F);
}
sscanf(sv,"%010u",&iv);
printf("iv=%010u\n",iv);
getch();
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧