数制转换求高手指教

宰相孙悟空 2013-01-30 08:23:15
输入一串数字如“123456789234”,判定不够偶数位末尾加上0,然后将数据以十六进制0x12,0x34,0x56。。。。输出。
求高手指教,谢谢了。
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2013-01-30
  • 打赏
  • 举报
回复
仅供参考
#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();
}
chenpengyu86 2013-01-30
  • 打赏
  • 举报
回复
#include <iostream>

void printf_by_byte(const char* str) {
    int i = 0;
    while (*(str + i) != '\0' && *(str + i + 1) != '\0') {
        std::cout << "0x" << *(str + i) << *(str + i + 1) << std::endl;
        i += 2;
    }
    if (*(str + i + 1) == '\0')
        std::cout << "0x" << *(str + i) << '0' << std::endl;
}

int main(int argc, char* argv[]) {
    if (argc != 2)
        return -1;
    printf_by_byte(argv[1]);
    return 0;
}
图灵狗 2013-01-30
  • 打赏
  • 举报
回复

#include <string.h>
#include <stdio.h>

void print(const char* str)
{
	int len = strlen(str);
	char hex[3];
	int h = 0;
	int i;

	for(i = 0; i < len; i++)
	{
		if(h == 0)
		{
			hex[h++] = str[i];
			if(i == len - 1)
			{
				hex[h++] = '0';
				hex[h] = '\0';
				printf("0x%s\n", hex);
			}
		}
		else
		{
			hex[h++] = str[i];
			hex[h] = '\0';
			printf("0x%s\n", hex);
			h = 0;
		}	
	}
}

int main(void)
{
	print("1234567892345");
	return 0;
}
mymtom 2013-01-30
  • 打赏
  • 举报
回复
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static unsigned char asc2hex[] = {
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
     0, 10, 11, 12, 13, 14, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0, 10, 11, 12, 13, 14, 15,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
};

char * strpack(const char *src, size_t len, char *dst)
{
    unsigned char *from, *to, *end;

    from = (unsigned char *)src;
    to = (unsigned char *)dst;

    for (end = to + len / 2; to < end; from += 2, to++)
        *to  = (asc2hex[*from] << 4) | asc2hex[*(from + 1)];

    return dst;
}

int main(int argc, char *argv[])
{
    char str[1024];
    char hex[1024];
    int i;
    int len;

    fgets(str, sizeof(str), stdin);
    len = strlen(str);
    if (len > 0 && str[len - 1] == '\n') {
        str[len - 1] = '\0';
        --len;
    }

    if (len % 2) {
        strcat(str, "0");
        ++len;
    }

    strpack(str, len, hex);
    for (i = 0; i < len / 2; ++i) {
        printf("0x%02x\n", (unsigned char)hex[i]);
    }

    return 0;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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