【问题标题】:Store 8 Ascii Values in unsigned int在 unsigned int 中存储 8 个 Ascii 值
【发布时间】:2014-02-06 03:55:16
【问题描述】:

我有一个问题。我有一串 ascii 值。我正在从 Hex 文件中读取。考虑字符串是 "0004EB9C" 。复制到 unsigned char 缓冲区中。

unsigned char buff[8] = {'0','0','0','4','E','B','9','C'}
unsigned int j = 0;

现在这个字符串或信息必须通过 UART 通信传输。考虑这代表我的RAM地址执行。我需要将这个 8 字节的 ascii 值存储在 unsigned int 中。我没有找到一种方法可以有人请专注于此。 复制/转换此字符串后的输出应该是这样的

printf("%x",j);

这应该打印出来

Output : 0x0004EB9C

提前致谢!!

【问题讨论】:

    标签: c hex ascii


    【解决方案1】:
    set answer to 0
    for each character
       left-shift answer by 4
       if the character is between '0' and '9' inclusive
           subtract '0' from it
       else
           subtract 'A' from it and add 10
       bitwise-or this into answer
    

    【讨论】:

    • #include int main(){ char data[] = "0004EB59C"; const int len = sizeof(data)/sizeof(char)-1; int i,value[sizeof(data)/sizeof(char)-1];无符号整数 j = 0; for(i=0;i= '0' && value[i]
    • 我认为您的 value 数组没有任何用途,顺便说一下,您没有初始化(其中包含任意数据)。只需使用data 数组,也许将每个字符复制到一个临时的计算。
    【解决方案2】:
    #include <stdio.h>
    
    int main(){
        char data[] =  "004EB59C";
        const int len = sizeof(data)/sizeof(char)-1;
    
        int i,value[sizeof(data)/sizeof(char)-1];
        unsigned int j = 0;
    
        for(i=0;i<len;++i)
            sscanf(data+i, "%1x",value + i);
    
        for(i=0;i<len;i++)
        {
           j <<= 4;
           j |= (0x0f & value[i]);             
           printf("%x\n",j);    
        } 
        return 0;
    }
    

    更正的代码。如果可能的话,我会要求即兴发挥这个答案。

    【讨论】:

    • 为什么不只是sscanf(data, "%x", &amp;j);
    • 嗨!!..ooga ..你可以即兴发挥吗..实际上我想编写一个代码来读取完整的ascii文件并在处理后将其复制到缓冲区中。你能即兴发挥吗..
    【解决方案3】:

    存储为unsigned j

    unsigned char buff[8] = {'0','0','0','4','E','B','9','C'}
    unsigned char buff2[sizeof buff + 1];
    memcpy(buff2, buff, sizeof buff);
    buff2[sizeof buff] = '\0';
    unsigned int j = (unsigned) strtoul(buff2, 0, 16);
    

    通过j打印

    printf("%#08x",j);
    

    直接通过buff打印

    fputs("0x", stdout);
    for (size_t i = 0; i < sizeof buff; i++)
      fputc(tolower(buff[i]), stdout);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2012-03-16
      • 2011-11-22
      • 2015-05-01
      相关资源
      最近更新 更多