十六进制字符串转十六进制字节代码

/*********************************************************************************
 *      Copyright:  (C) 2016 Guo Wenxue<[email protected]>
 *                  All rights reserved.
 *
 *       Filename:  strhex.c
 *    Description:  This file used convert HEX string to HEX bytes and write into file
 *
 *        Version:  1.0.0(09/20/2016)
 *         Author:  Guo Wenxue <[email protected]>
 *      ChangeLog:  1, Release initial version on "09/20/2016 09:16:41 AM"
 *
 ********************************************************************************/
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

//#define DEBUG
#ifdef  DEBUG
#define dbg_print(format,args...) printf(format, ##args)
#else
#define dbg_print(format,args...) do{} while(0);
#endif

int hexStr2Bytes(char *hexstr, int strlen, unsigned  char *bytes)
{
    int           i;
    int           cnt = 0; 

    for(i=0; i<strlen; i++)
    {
        dbg_print("%c", hexstr[i]);
    }
    dbg_print("\n");

    for (i=0; i<strlen; i++)
    {
        if( !isxdigit(hexstr[i]) )
        {
            continue;
        }

        dbg_print("proc ‘%c‘ ", hexstr[i]);
        if ((hexstr[i] >= ‘0‘) && (hexstr[i] <= ‘9‘))
            *bytes = (hexstr[i]-‘0‘) << 4;
        else
            *bytes = (toupper(hexstr[i])-‘A‘+10) <<4;
        dbg_print("[0x%02x] ", *bytes);

        i++;

        dbg_print("proc ‘%c‘ ", hexstr[i]);
        if ((hexstr[i] >= ‘0‘) && (hexstr[i] <= ‘9‘))
            *bytes |= hexstr[i]-‘0‘;
        else
            *bytes |= toupper(hexstr[i])-‘A‘+10;
        dbg_print("=>[0x%02x]\n", *bytes);

        bytes++;
        cnt ++;
    }

    return cnt;
}

int main (int argc, char **argv)
{
    char                *filename;
    unsigned char       buf[1024];
    char                *hexstr;
    int                 bytes;
    int                 fd;
    int                 i; 

    if(argc != 3 )
    {
        printf("Usage: %s [filename] [hexstr]\n", argv[0]);
        return -1;
    }

    filename = argv[1];
    hexstr = argv[2];

    if( (fd=open(filename, O_CREAT|O_TRUNC|O_RDWR, 0666)) < 0 )
    {
        printf("Open file ‘%s‘ failure: %s\n", filename, strerror(errno));
        return -2;
    }

    bytes = hexStr2Bytes(hexstr, strlen(hexstr), buf);

    write(fd, buf, bytes);

    close(fd);

    return 0;
} 

[[email protected] ~]$ ./strhex f1.txt "1B 40 76 4C 4C 93 09 CA 72 8A C2 02 02 02 8A C2
> D2 A2 92 D2 A2 9A 02 02 02 82 8A 82 92 82 8A 8A
> 52 1C 26 1C 2E 1B 69 01 1C 26 C7 EB C7 F3 1C 2E
> 1B 69 00 1B 69 01 30 30 34 1B 69 00 1B 6C 0C 1C
> 26 B0 CB B2 E3 20 20 B9 E3 B2 A5 1C 2E 0D 1B 6C
> 00 0D 0A"

时间: 2024-11-17 11:18:26

十六进制字符串转十六进制字节代码的相关文章

二进制值和十六进制字符串相互转换的C++代码

1 #include <iostream> 2 #include <string> 3 #include <stdint.h> 4 5 using namespace std; 6 7 string BinToHex(const string &strBin, bool bIsUpper = false) 8 { 9 string strHex; 10 strHex.resize(strBin.size() * 2); 11 for (size_t i = 0;

android byte字节数组转换十六进制字符串(物联网开发总结)

想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成十六进制字符串,或者最后又是十进制数据.都是根据双方的协议来开发的.那么我发送过去的数据也需要,经过特殊转换成byte字节发过去,硬件那边收到不至于乱码的数据. 1.硬件调试发给android这边是十六进制数据 原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 00 0C 13 78 56 34 12 0C 3B 78 34 12 0C 26 78 56 34 1

VB下较为高效的字节和十六进制字符串转换

在进行十六进制字符串转换为byte()的时候,比网络常见的下面这种代码快一倍以上,以空间换时间吧... Private Function HexToByte(str As String) As Byte() Dim rst() As Byte Dim i As Long, j As Long i = Len(str) j = i \ 2 - 1 ReDim rst(j) For i = 0 To j rst(i) = CByte("&H" & Mid$(str, i +

将字节数组转换为十六进制字符串

/**     * 将字节数组转换为十六进制字符串     *      * @param byteArray     * @return     */    private static String byteToStr(byte[] byteArray) {        String strDigest = "";        for (int i = 0; i < byteArray.length; i++) {            strDigest += byte

Java 将字节转换为十六进制字符串

/**     * 将字节转换为十六进制字符串     *      * @param mByte     * @return     */    private static String byteToHexStr(byte mByte) {        char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',                'B', 'C', 'D', 'E', 'F' };      

Java 十六进制字符串-HexString

http://my.oschina.net/xinxingegeya/blog/287476 byte[]和十六进制字符串相互转换 Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示. 所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果 new String(H) + new String(L). 同理,相反的转换也是将两个16进制字符

Java学习篇之---byte与十六进制字符串之间互转

byte与十六进制字符串之间互转 byte,字节类型,占用8bit空间,可用8位2进制数表示:十六进制,每位占有4bit空间,可用4位2进制数表示. 我们可以把每个byte类型转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果. 即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte. 根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将1

【算法C++】十进制字符串转十六进制字符串

问题描述 将一个十进制字符串转化为十六进制字符串. 问题解决 这个问题如果只是十进制转化为十六进制,其实是比较容易的,只要了解短除法就可以解决了,但题目里数是字符串,这就将题目的难度增高了.因为如果只是int型,那最多也就支持个10位数:但字符串却可以上千位,所以我们使用短除法的时候会比较麻烦. 这里我先将字符串转成了int型,先把简单的10位数的实现出来,来理顺一下思路.下面是10进制数转16进制的代码: int main(){ string s; while (cin >> s){ int

在十六进制字符串与数值类型之间转换

1.获取‘字符串’中的每个字符的十六进制值. 2.获取与十六进制字符串中的每个值对应的字符.. 3.将十六进制string转换为整形. 4.将十六进制string转换为浮点型. 5.将字节数组转换为十六进制string. 此案例输入中的每个字符的是十六进制值.先将string分析为字符数组,然后对每个字符调用Inter32(char)以获取相应的数字值. static void Main(string[] args) { string input = "Hello World!"; c