16进制字符串转换为3进制(扩展至K进制)

【本文链接】

http://www.cnblogs.com/hellogiser/p/16-to-3-or-k.html

【题目】

写代码把16进制表示的串转换为3进制表示的串。例如x=”5”,则返回:”12”;又例如:x=”F”,则返回”120”

【代码】

C++ Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 
/*
    version: 1.0
    author: hellogiser
    blog: http://www.cnblogs.com/hellogiser
    date: 2014/9/22
*/

#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;

int getvalue(char c)
{
    if (c >= ‘0‘ && c <= ‘9‘)
        return c - ‘0‘;
    else if (c >= ‘a‘ && c <= ‘f‘)
        return c - ‘a‘ + 10;
    else if (c >= ‘A‘ && c <= ‘F‘)
        return c - ‘A‘ + 10;
    return 0;
}

// "f" ===>15
int GetString16Value(char *str)
{
    if(str == NULL || *str == ‘\0‘)
        return -1;
    int result = 0;
    while(*str != ‘\0‘)
    {
        result = result * 16 + getvalue(*str);
        str ++;
    }
    return result;
}

void output(stack<int> &s)
{
    while (!s.empty())
    {
        cout << s.top();
        s.pop();
    }
    cout << endl;
}

// f --->15 --->120
/*
15     n%3   n/3
        0     5
        2     1
        1     0
*/
void String16to3(char *str)
{
    if(str == NULL || *str == ‘\0‘)
        return;
    int value16 = GetString16Value(str);
    stack<int> result;
    int t;
    // do while(value16)      // if value16=0,then result push 0
    do
    {
        t = value16 % 3;
        result.push(t); // save t
        value16 /= 3;
    }
    while(value16);
    // reverse output, so here we use stack to implement this function
    // 021 ===>120
    output(result);
}

// 16 to K
void String16toK(char *str, unsigned int K)
{
    if(str == NULL || *str == ‘\0‘)
        return;
    if (K == 0 || K > 10)
        return;

int value16 = GetString16Value(str);
    stack<int> result;
    int t;
    do
    {
        t = value16 % K;
        result.push(t); // save t
        value16 /= K;
    }
    while(value16);
    // reverse output, so here we use stack to implement this function
    output(result);
}

void test_base(char *str)
{
    String16to3(str);
    String16toK(str, 3);
}

void test_case0()
{
    char *str = NULL;
    test_base(str);
}

void test_case1()
{
    char str[] = "";
    test_base(str);
}

void test_case2()
{
    char str[] = "0";
    test_base(str);
}

void test_case3()
{
    char str[] = "5";
    test_base(str);
}

void test_case4()
{
    char str[] = "F";
    test_base(str);
}

void test_main()
{
    test_case0(); //
    test_case1(); //
    test_case2(); // 0
    test_case3(); // 12
    test_case4(); // 120
}

int main()
{
    test_main();
    return 0;
}

【参考】

http://www.cnblogs.com/sooner/p/3280050.html

时间: 2024-12-17 17:32:38

16进制字符串转换为3进制(扩展至K进制)的相关文章

16进制字符串转换为NSData,然后转换为NSString---用于安全支付环境

16进制字符串转换为NSData,然后转换为NSString---用于安全支付环境 +(NSData *)hexToByteToNSData:(NSString *)str { int j=0; Byte bytes[[str length]/2]; for(int i=0;i<[str length];i++) { int int_ch; ///两位16进制数转化后的10进制数 unichar hex_char1 = [str characterAtIndex:i]; ////两位16进制数中

16进制字符串转换为byte数组

/// <summary> /// 16进制字符转换为byte数组 /// </summary> /// <param name="hexString">偶数位,由16进制字符[0-9a-fA-F]组成</param> /// <returns>null为转换失败</returns> private byte[] HexStringToBytes(string hexString) { if (string.IsN

MFC 编辑框输入16进制字符串转换为16进制数或者10进制数据计算

1.编辑框添加变量,并选择变量类型为CString. 2.  使用"_tcstoul"函数将Cstring 类型转换为16进制/10进制数进行计算. 原文地址:https://www.cnblogs.com/lize19940412/p/10068273.html

Java中byte与16进制字符串的互相转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

Java字节数组和16进制字符串的互相转化

背景基础知识: 1.字符编码的相关知识(转自http://blog.csdn.net/llwan/article/details/7567906) 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不可模糊.我们知道,计算机把任何东西都用数字来表示,"字符"也不例外.比如我们要显示一个阿拉伯数字"3",在我们的PC里,其实并不是仅仅用一

Java中byte与16进制字符串的互相转换(转)

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可

java中byte[] 和16进制字符串互转

//将byte[]转换为16进制字符串 public static String byte2hex(byte[] b) { StringBuilder hs = new StringBuilder(); String stmp; for (int n = 0; b != null && n < b.length; n++) { stmp = Integer.toHexString(b[n] & 0XFF); if (stmp.length() == 1) hs.append(

C# 校验并转换 16 进制字符串到字节数组

问题 最近在进行硬件上位机开发的时候,经常会遇到将 16 进制字符串转换为 byte[] 的情况,除了这种需求以外,还需要判定一个字符串是否是有效的 16 进制数据. 解决 字符串转 byte[] 的情况可以使用 Convert.ToByte(string) 来解决,16 进制数据的判定则可以结合正则和长度来进行处理. 在这里我是只接受以下两种形式的 16 进制字符串,并对其进行验证和转换. AA 12 34 56 78 06 AA-12-34-56-78-06 下面就是代码: public s

51NOD 1116 K进制下的大数(字符串取模 + 枚举)

传送门 1116 K进制下的大数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数在K进制下是K - 1的倍数.现在由你来求出这个最小的进制K. 例如:给出的数是A1A,有A则最少也是11进制,然后发现A1A在22进制下等于4872,4872 mod 21 = 0,并且22是最小的,因此输出k = 22(大数的表示中A对应10,Z对应35). Input 输入大数对应的字符串S