byte数组转化成16进制字符串用法分析
字节数组与16进制字符串的相互转换

字节数组与16进制字符串的相互转换众所周知,⼆进制数据(包括内存地址)在计算机中⼀般以16进制的⽅式表⽰,⼤家也习惯使⽤16进制来查看、记录⼆进制数据,所以看了⼀下Java中字节与16进制的相互转换。
因为⼤多数情况下我们遇到的都是字节数组,所以本⽂是以字节数据与16进制字符串的相互转换为例。
先说⼀下看字节与16进制转换问题的缘由。
在项⽬中,我准备写⼀个MD5的⼯具⽅法,使⽤的是JDK⾃带的 MessageDigest 信息摘要类,代码如下:MessageDigest md5Digest = MessageDigest.getInstance("MD5");byte[] btArr = md5Digest.digest(str.getBytes());很明显,我在调⽤了信息摘要⽅法之后,得到的是⼀个字节数组 byte[] ,⽽我想要的 MD5 ⽅法应该是像⼤多数md5⼯具⼀样,返回⼀个 32 位的字符串。
简单查了⼀下,才知道原来 MD5 信息摘要算法返回的结果是⼀个 128 bit 的⼆进制数据,128 bit 正好是 16个 byte,⽽1个byte转成16进制正好是2位(16进制使⽤4个bit,⼀个byte有8个bit),所以MD5算法返回的128bit 转成 16进制就正好是 32位。
听着可能有点绕,简单的说,上述代码中md5信息摘要之后,返回了⼀个有 16个字节的字节数组,⽽现在需要做的就是把这个字节数组转成16进制格式的数据。
回到正题,字节与16进制相互转换的代码如下:public class HexTest {private static final char HexCharArr[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};private static final String HexStr = "0123456789abcdef";public static String byteArrToHex(byte[] btArr) {char strArr[] = new char[btArr.length * 2];int i = 0;for (byte bt : btArr) {strArr[i++] = HexCharArr[bt>>>4 & 0xf];strArr[i++] = HexCharArr[bt & 0xf];}return new String(strArr);}public static byte[] hexToByteArr(String hexStr) {char[] charArr = hexStr.toCharArray();byte btArr[] = new byte[charArr.length / 2];int index = 0;for (int i = 0; i < charArr.length; i++) {int highBit = HexStr.indexOf(charArr[i]);int lowBit = HexStr.indexOf(charArr[++i]);btArr[index] = (byte) (highBit << 4 | lowBit);index++;}return btArr;}}byteArrToHex 字节数组转成16进制字符串基本的算法是:把⼀个字节分成⾼4位的bit和低4位的bit,先取⾼4位的bit,得到这4位bit对应的数字(范围在0~15),就可以知道对应的16进制数是多少了;按同样的⽅式取到低4位bit对应的16进制数,把这些16进制数放到⼀个数组⾥,最后串成⼀个hexToByteArr 16进制字符串转成字节数组基本的算法是:把16进制字符串分成⼀个的char数组,循环取其中的两个char,这两个char的值⼀定都是在[0123456789abcdef]之间;先找到第⼀个char对应的下标位置,⽐如说char的值为 a,那么下标位置就是 10,把数字10转成byte类型,取低4位因16进制只需占⽤4个bit,⽽⼀个字节有8个bit,所以字节转16进制的时候需要拆开来转换,⼀个字节对应两个16进制字符;⽽16进制字符串转成字节的时候,需要⽤两个16进制数对应的bit拼接起来才能组成⼀个完整的字节,转换后得到的字节数组的(完)。
java byte[]转16进制效率高内存底的方法 -回复
![java byte[]转16进制效率高内存底的方法 -回复](https://img.taocdn.com/s3/m/c3dcc97782c4bb4cf7ec4afe04a1b0717fd5b3e7.png)
java byte[]转16进制效率高内存底的方法-回复Java中,将byte数组转换为16进制的字符串是一种常见的操作。
在处理大量的数据时,如何高效地进行转换,并且使用尽可能少的内存是非常重要的。
在本文中,我将为您解释一种高效而低内存消耗的方法。
首先,让我们明确一下问题的要求。
我们需要将一个byte数组转换为16进制的字符串。
例如,如果我们有一个byte数组[10, 20, 30],我们希望得到一个字符串"0A141E"。
这个字符串表示了每个byte值的16进制表示。
要实现这个功能,我们可以使用Java内置的工具类来转换byte数组为16进制字符串。
这种方法是非常简单和直观的,但是它可能存在性能和内存消耗上的问题。
下面是一个使用这种方法的示例代码:javapublic String byteArrayToHexString(byte[] array) {StringBuilder sb = new StringBuilder();for (byte b : array) {sb.append(String.format("02X", b));}return sb.toString();}在上面的代码中,我们使用StringBuilder来逐个追加byte值的16进制表示。
然后,我们使用String.format方法将byte值转换为长度为2的16进制字符串,并将其追加到StringBuilder中。
最后,我们将StringBuilder转换为String并返回结果。
尽管这种方法非常简单,但是它可能存在性能问题。
在每次迭代中,我们都会创建一个新的String对象来保存中间结果,这可能导致频繁的垃圾回收和内存碎片化。
此外,由于StringBuilder的默认初始容量为16,当处理大量数据时,可能会导致多次扩容,进一步增加内存的使用。
为了解决这个问题,我们可以使用Java中的ByteBuffer和Hex类来提高性能和减少内存消耗。
[转]Java中byte与16进制字符串的互相转换
![[转]Java中byte与16进制字符串的互相转换](https://img.taocdn.com/s3/m/e7464029182e453610661ed9ad51f01dc281573d.png)
[转]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,原理同上。
根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。
/**Java代码1. * Convert byte[] to hex string.这⾥我们可以将byte转换成int,然后利⽤Integer.toHexString(int)来转换成16进制字符串。
2. * @param src byte[] data3. * @return hex string4. */5. public static String bytesToHexString(byte[] src){6. StringBuilder stringBuilder = new StringBuilder("");7. if (src == null || src.length <= 0) {8. return null;9. }10. for (int i = 0; i < src.length; i++) {11. int v = src[i] & 0xFF;12. String hv = Integer.toHexString(v);13. if (hv.length() < 2) {14. stringBuilder.append(0);15. }16. stringBuilder.append(hv);17. }18. return stringBuilder.toString();19. }20. /**21. * Convert hex string to byte[]22. * @param hexString the hex string23. * @return byte[]24. */25. public static byte[] hexStringToBytes(String hexString) {26. if (hexString == null || hexString.equals("")) {27. return null;28. }29. hexString = hexString.toUpperCase();30. int length = hexString.length() / 2;31. char[] hexChars = hexString.toCharArray();32. byte[] d = new byte[length];33. for (int i = 0; i < length; i++) {34. int pos = i * 2;35. d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));36. }37. return d;38. }39. /**40. * Convert char to byte41. * @param c char42. * @return byte43. */44. private byte charToByte(char c) {45. return (byte) "0123456789ABCDEF".indexOf(c);46. }Java代码1. //将指定byte数组以16进制的形式打印到控制台2. public static void printHexString( byte[] b) {3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[i] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. System.out.print(hex.toUpperCase() );9. }10.11. }java中byte转换int时为何与0xff进⾏与运算在剖析该问题前请看如下代码Java代码1. public static String bytes2HexString(byte[] b) {2. String ret = "";3. for (int i = 0; i < b.length; i++) {4. String hex = Integer.toHexString(b[ i ] & 0xFF);5. if (hex.length() == 1) {6. hex = '0' + hex;7. }8. ret += hex.toUpperCase();9. }10. return ret;11. }上⾯是将byte[]转化⼗六进制的字符串,注意这⾥b[ i ] & 0xFF将⼀个byte和 0xFF进⾏了与运算,然后使⽤Integer.toHexString取得了⼗六进制字符串,可以看出b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进⾏与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不⾏吗?答案是不⾏的.其原因在于:1.byte的⼤⼩为8bits⽽int的⼤⼩为32bits2.java的⼆进制采⽤的是补码形式在这⾥先温习下计算机基础理论byte是⼀个字节保存的,有8个位,即8个0、1。
十六进制字符串 字节数组相互转化

一、引言在计算机编程和数据处理中,经常会遇到需要将字符串表示的十六进制数转换为字节数组,或者将字节数组转换为十六进制字符串的情况。
这种转换涉及到了数字的表示和数据的存储,是计算机科学中的常见问题。
本文将介绍如何实现十六进制字符串和字节数组之间的相互转化,以及在实际编程中的应用。
二、十六进制字符串转字节数组1. 将十六进制字符串转换为字节数组的过程可以分为以下几个步骤:1) 需要将十六进制字符串按照两个字符一组进行分割,得到一个字符数组。
2) 将每一组字符转换为对应的字节,即将十六进制数转换为一个字节。
这个过程可以通过将每个十六进制字符转换为对应的整数,然后将两个整数合并为一个字节来实现。
3) 将得到的字节数组作为结果返回。
2. 以下是一个Java语言中将十六进制字符串转换为字节数组的示例代码:```javapublic byte[] hexStringToByteArray(String hexString) {int length = hexString.length();byte[] byteArray = new byte[length / 2];for (int i = 0; i < length; i += 2) {byteArray[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)+ Character.digit(hexString.charAt(i+1), 16)); }return byteArray;}```3. 实际应用中,可以根据具体的编程语言和需求,调用相应的库函数或者编写自己的转换函数来实现十六进制字符串到字节数组的转换。
三、字节数组转十六进制字符串1. 将字节数组转换为十六进制字符串的过程与将十六进制字符串转换为字节数组的过程相反,可以分为以下几个步骤:1) 需要遍历字节数组,并将每个字节转换为对应的两个十六进制字符。
java中16进制字符串与普通字符串与byte数组之间的转化

java中16进制字符串与普通字符串与byte数组之间的转化⽅法依赖commons-codec包 maven的引⼊⽅式如下1<dependency>2<groupId>commons-codec</groupId>3<artifactId>commons-codec</artifactId>4<version>1.12</version>5</dependency>1. 普通字符串转换为16进制字符串1 /**2 * 将普通字符串转换为16进制字符串3 * @param str 普通字符串4 * @param lowerCase 转换后的字母为是否为⼩写可不传默认为true5 * @param charset 编码格式可不传默认为Charset.defaultCharset()6 * @return7 * @throws UnsupportedEncodingException8*/9public static String str2HexStr(String str,boolean lowerCase,String charset) throws UnsupportedEncodingException {10return Hex.encodeHexString(str.getBytes(charset),lowerCase);11 }2.16进制字符串转换为普通字符串/*** 将16进制字符串转换为普通字符串* @param hexStr 16进制字符串* @param charset 编码格式可不传默认为Charset.defaultCharset()* @return* @throws DecoderException* @throws UnsupportedEncodingException*/public static String hexStr2Str(String hexStr,String charset) throws DecoderException, UnsupportedEncodingException {byte[] bytes = Hex.decodeHex(hexStr);return new String(bytes,charset);}3. 16进制字符串转换为byte数组1/**2 * 将16进制字符串转换为byte数组3 * @param hexItr 16进制字符串4 * @return5*/6public static byte[] hexItr2Arr(String hexItr) throws DecoderException {7return Hex.decodeHex(hexItr);8 }4. byte数组转换为16进制字符串1/**2 * byte数组转化为16进制字符串3 * @param arr 数组4 * @param lowerCase 转换后的字母为是否为⼩写可不传默认为true5 * @return6*/7public static String arr2HexStr(byte[] arr,boolean lowerCase){8return Hex.encodeHexString(arr, lowerCase);9 }5. 将普通字符串转换为指定编码格式的byte数组1/**2 * 将普通字符串转换为指定格式的byte数组3 * @param str 普通字符串4 * @param charset 编码格式可不传默认为Charset.defaultCharset()5 * @return6 * @throws UnsupportedEncodingException7*/8public static byte[] str2Arr(String str,String charset) throws UnsupportedEncodingException { 9return str.getBytes(charset);10 }6. 将byte数组转换为指定编码格式的普通字符串1/**2 * 将byte数组转换为指定编码格式的普通字符串3 * @param arr byte数组4 * @param charset 编码格式可不传默认为Charset.defaultCharset()5 * @return6 * @throws UnsupportedEncodingException7*/8public static String arr2Str(byte[] arr,String charset) throws UnsupportedEncodingException { 9return new String(arr,charset);10 }。
java byte[]转16进制效率高内存底的方法
![java byte[]转16进制效率高内存底的方法](https://img.taocdn.com/s3/m/1844eb9dac51f01dc281e53a580216fc700a5337.png)
java byte[]转16进制效率高内存底的方法摘要::1.引入话题背景;2.分析现有方法;3.提出改进方法;4.代码实现及测试;5.总结高效原因。
正文:正文:在Java编程中,将byte[]转换为16进制字符串是一项常见的操作。
然而,现有的方法往往在效率和内存占用方面存在不足。
本文将介绍一种高效且内存占用较低的方法,并对这种方法进行代码实现和测试。
1.引入话题背景在现有的Java技术中,将byte[]转换为16进制字符串的方法有很多。
然而,这些方法在处理大量数据时,可能会因为效率低下或内存占用过高而导致程序卡顿或崩溃。
因此,寻求一种高效且内存占用较低的方法显得尤为重要。
2.分析现有方法目前,常见的将byte[]转换为16进制字符串的方法有以下两种:(1)使用Java内置的`hexdump`方法:```javapublic static String byteArrayToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02x", b));}return sb.toString();}```(2)使用循环遍历字节数组并转换:```javapublic static String byteArrayToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (int i = 0; i < bytes.length; i++) {sb.append(String.format("%02x", bytes[i]));}return sb.toString();}```3.提出改进方法针对现有方法的不足,本文提出一种基于字符串拼接而非循环遍历的字节数组转换方法。
java byte数组转int16方法

Java 中可以使用 ByteBuffer 类来进行 byte 数组与 int16 之间的转换。
将 byte 数组转为 int16,可以使用 ByteBuffer.wrap 方法将 byte 数组包装成 ByteBuffer对象,然后调用 ByteBuffer 的 getShort 方法获取 int16 值。
示例代码如下:```javabyte[] byteArray = {0x12, 0x34}; // 定义 byte 数组short intValue = ByteBuffer.wrap(byteArray).getShort(); // 将 byte 数组转为 int16 System.out.println(intValue); // 输出 4660```将 int16 转为 byte 数组,可以使用 ByteBuffer.allocate 方法创建一个指定长度的ByteBuffer 对象,然后调用 ByteBuffer 的 putShort 方法将 int16 值存储到 ByteBuffer 中,再调用 ByteBuffer 的 array 方法获取存储在 ByteBuffer 中的 byte 数组。
示例代码如下:```javashort intValue = 4660; // 定义 int16 值byte[] byteArray = ByteBuffer.allocate(2).putShort(intValue).array(); // 将 int16 转为 byte 数组System.out.println(Arrays.toString(byteArray)); // 输出 [18, 52]```需要注意的是,ByteBuffer 类中提供了多种 get 和 put 方法,可以根据具体需求选择合适的方法进行转换。
同时,在进行 byte 数组与 int16 之间的转换时,请确保 byte 数组的长度和存储顺序正确,以免出现错误的转换结果。
Javabyte和hex十六进制字符串转换

Javabyte和hex⼗六进制字符串转换在Java中字符串由字符char组成,⼀个char由两个byte组成,⽽⼀个byte由⼋个bit组成,⼀个⼗六进制字符(0-F)实际上由4个字节byte即可表达,因此,从字节数组到⼗六进制字符串,实际上占⽤的存储空间扩⼤了4倍。
下⾯来看⼀下从⼗六进制字符串转换为字节数组的⽅式:第⼀种⽅法:实际借⽤了Character类的⽅法进⾏16进制的转换1static byte[] hexToByteArray2(String hex)2 {3int l = hex.length();4byte[] data = new byte[l / 2];5for (int i = 0; i < l; i += 2)6 {7 data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)8 + Character.digit(hex.charAt(i + 1), 16));9 }10return data;11 }第⼆种⽅法:借⽤了Integer类中的⼗六进制转换:1static byte[] hexToByteArray(String hexString) {2byte[] result = new byte[hexString.length() / 2];3for (int len = hexString.length(), index = 0; index <= len - 1; index += 2) {4 String subString = hexString.substring(index, index + 2);5int intValue = Integer.parseInt(subString, 16);6 result[index / 2] = (byte)intValue;7 }8return result;9 }从字节数组转换为⼗六进制的⽅法:⼀、1static String byteArrayToHex(byte[] bytes) {2 StringBuilder result = new StringBuilder();3for (int index = 0, len = bytes.length; index <= len - 1; index += 1) {4int char1 = ((bytes[index] >> 4) & 0xF);5char chara1 = Character.forDigit(char1, 16);6int char2 = ((bytes[index]) & 0xF);7char chara2 = Character.forDigit(char2, 16);8 result.append(chara1);9 result.append(chara2);10 }11return result.toString();12 }⼆、1static String byteArrayToHex2(byte[] bytes) {2 StringBuilder result = new StringBuilder();3for (int index = 0, len = bytes.length; index <= len - 1; index += 1) {45 String invalue1 = Integer.toHexString((bytes[index] >> 4) & 0xF);6 String intValue2 = Integer.toHexString(bytes[index] & 0xF);7 result.append(invalue1);8 result.append(intValue2);9 }10return result.toString();11 }然后介绍⼀种更实⽤的字符串和⼗六进制之间的转换:⼗六进制转字符串:1static String hexToString(String hex, Charset charset) {2return new String(new BigInteger(hex, 16).toByteArray(), charset);3 }字符串转⼗六进制:1static String stringToHex(String arg, Charset charset) {2if (arg == null || arg.length() == 0) {3return "";4 }5byte[] bytes = arg.getBytes(charset);6return String.format("%0" + bytes.length * 2 + "x", new BigInteger(1, bytes));7 }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
byte数组转化成16进制字符串,C#中的overload,overwrite,override的区别C++ 实现Single Sever Simulation AFNetworking 更改请求时间iOS chrome插件,二维码自动生成,C编程方式进行控制台输入maven jar shade assembly配置[XML]Maven pom.xml public:double angle;QPen ang_info_pen;};#endif[文件] MainWindow.cpp ~ 28KB[文件] MainWindow.h ~ 3KB//AngularJS 绑定鼠标左键、右键单击事件//API权限设计总结系统sign验证规则//Apriopri算法的简单实现#ifndef __MAINWINDOW_H__#define __MAINWINDOW_H__#include "ui_MainWindow.h"#include "Shape.h"#include <QtGui>class CDockWin;class CDrawWin:public QMainWindow,public Ui_Mainwin{Q_OBJECTpublic:CDrawWin(QWidget *parent = NULL);// 画图状态定义enum DRAW_STATUS{// 无画图状态DRAW_STATUS_NONE = 0,// 绘画当中DRAW_STATUS_DRAWING,// 移动DRAW_STATUS_DRAG,// 改变图元DRAW_STATUS_CHANGE};// 当前的菜单选择enum MENU_STATUS{// 无画图菜单MENU_STATUS_NONE = 0,// 画直线菜单MENU_STATUS_LINE,// 画圆菜单MENU_STATUS_CIRCLE,// 画矩形菜单MENU_STATUS_RECTANGE,MENU_STATUS_POLYGON,MENU_STATUS_ANGLE,MENU_STATIS_DEL};//定义当前创建的图形enum SHAPE_STATUS{SHAPE_NONE = 0,SHAPE_LINE,SHAPE_CIRCLE,SHAPE_RECTANGLE,SHAPE_POLYGON,SHAPE_ANGLE,SHAPE_SCALE};public://碰撞CShape *HitTest(QMouseEvent *event,bool &bHit,bool &bCtrlHit);//画图void paintEvent(QPaintEvent *event);void process_line(QMouseEvent *event);void process_circle(QMouseEvent *event);void process_rectangle(QMouseEvent *event);void process_polygon(QMouseEvent *event);void process_angle(QMouseEvent *event);// 鼠标按下捕获器void mousePressEvent(QMouseEvent* event);// 鼠标释放事件捕获器void mouseReleaseEvent(QMouseEvent *event);// 鼠标移动事件捕获器void mouseMoveEvent(QMouseEvent* event);void mouseDoubleClickEvent(QMouseEvent *event);void closeEvent(QCloseEvent *event);void timerEvent(QTimerEvent *event);void on_acOpen_triggered();void on_acDrawLine_triggered();void on_acDrawCircle_triggered();void on_acDrawRectange_triggered();void on_acSelect_triggered();void on_acSet_color_triggered();void on_acDrawPolygon_triggered();void on_acDrawAngle_triggered();void on_ac_Save_triggered();void on_ac_New_triggered();void on_acImage_triggered();void on_acDelete_triggered();void on_acSaveImage_triggered(); public:static int countShape;static int widLine;static unsigned char m_curMenuStatus;static unsigned char m_curDrawStatus;static unsigned char m_curShapestatus;QVector<CShape *> m_shapeList;QVector<QColor>m_colorList;QVector<unsigned char> m_shapeStatus;CShape *m_curShape;static CShape *m_tmp;static QColor m_hitCol;static QColor m_curCol;static QColor m_CirCol;static QColor m_RectCol;static QColor m_PolyCol;static QColor m_AngCol;static QColor m_tmpCol;static unsigned int color_Count;static unsigned int shape_Count;QLabel *m_time;QLabel *m_timeText;QDockWidget *m_dock;CDockWin *m_widget;bool maybeSave;QImage *m_image;QPixmap pixmap;bool delet_image;};[代码] [Google Go]代码import ("io/ioutil""net/http""net/""fmt""encoding/json")//----------------------------------// 黄金数据调用示例代码-聚合数据// 在线接口文档:www/docs/29//----------------------------------const APPKEY = "*******************" //您申请的APPKEYfunc main(){//1.上海黄金交易所Request1()//2.上海期货交易所Request2()//3.银行账户黄金Request3()}//1.上海黄金交易所func Request1(){//请求地址juhe :="web:8080/finance/gold/shgold"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Keyparam.Set("v","") //JSON格式版本(0或1)默认为0//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}//2.上海期货交易所func Request2(){//请求地址juhe :="web:8080/finance/gold/shfuture"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Keyparam.Set("v","") //JSON格式版本(0或1)默认为0//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}//3.银行账户黄金func Request3(){//请求地址juhe :="web:8080/finance/gold/bankgold"//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key",APPKEY) //APP Key//发送请求data,err:=Get(juhe,param)if err!=nil{fmt.Errorf("请求失败,错误信息:\r\n%v",err)}else{var netReturn map[string]interface{}json.Unmarshal(data,&netReturn)if netReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v",netReturn["result"]) }}}// get 网络请求func Get(api string,params .Values)(rs[]byte ,err error){var *.,err=.Parse(api)if err!=nil{fmt.Printf("解析错误:\r\n%v",err)return nil,err}//如果参数中有中文参数,这个方法会进行Encode.RawQuery=params.Encode()resp,err:=http.Get(.String())if err!=nil{fmt.Println("err:",err)return nil,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}// post 网络请求,params 是.Values类型func Post(api string, params .Values)(rs[]byte,err error){resp,err:=http.PostForm(api, params)if err!=nil{return nil ,err}defer resp.Body.Close()return ioutil.ReadAll(resp.Body)}代码描述:基于GO的黄金数据接口调用代码实例关联数据:黄金数据[代码] [C#]代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using ;using System.IO;using ;using System.Diagnostics;using System.Web;//----------------------------------// 黄金数据调用示例代码-聚合数据// 在线接口文档:www/docs/29// 代码中JsonObject类下载地址:/download/gcm3206021155665/7458439//----------------------------------namespace ConsoleAPI{class Program{static void Main(string[] args){string appkey = "*******************"; //配置您申请的appkey//1.上海黄金交易所string 1 = "web:8080/finance/gold/shgold";var parameters1 = new Dictionary<string, string>();parameters1.Add("key", appkey);//你申请的keyparameters1.Add("v" , ""); //JSON格式版本(0或1)默认为0string result1 = sendPost(1, parameters1, "get");JsonObject newObj1 = new JsonObject(result1);String errorCode1 = newObj1["error_code"].Value;if (errorCode1 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj1);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1["reason"].Value);}//2.上海期货交易所string 2 = "web:8080/finance/gold/shfuture";var parameters2 = new Dictionary<string, string>();parameters2.Add("key", appkey);//你申请的keyparameters2.Add("v" , ""); //JSON格式版本(0或1)默认为0string result2 = sendPost(2, parameters2, "get");JsonObject newObj2 = new JsonObject(result2);String errorCode2 = newObj2["error_code"].Value;if (errorCode2 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj2);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2["reason"].Value);}//3.银行账户黄金string 3 = "web:8080/finance/gold/bankgold";var parameters3 = new Dictionary<string, string>();parameters3.Add("key", appkey);//你申请的keystring result3 = sendPost(3, parameters3, "get");JsonObject newObj3 = new JsonObject(result3);String errorCode3 = newObj3["error_code"].Value;if (errorCode3 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj3);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj3["error_code"].Value+":"+newObj3["reason"].Value);}}/// <summary>/// Http (GET/POST)/// </summary>/// <param name="">请求</param>/// <param name="parameters">请求参数</param>/// <param name="method">请求方法</param>/// <returns>响应内容</returns>static string sendPost(string , IDictionary<string, string> parameters, string method){if (method.ToLower() == "post"){HttpWebRequest req = null;HttpWebResponse rsp = null;System.IO.Stream reqStream = null;try{req = (HttpWebRequest)WebRequest.Create();req.Method = method;req.KeepAlive = false;req.ProtocolVersion = HttpVersion.Version10;req.Timeout = 5000;req.ContentType = "application/x-www-form-encoded;charset=utf-8";byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));reqStream = req.GetRequestStream();reqStream.Write(postData, 0, postData.Length);rsp = (HttpWebResponse)req.GetResponse();Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);return GetResponseAsString(rsp, encoding);}catch (Exception ex){return ex.Message;}finally{if (reqStream != null) reqStream.Close();if (rsp != null) rsp.Close();}}else{//创建请求HttpWebRequest request = (HttpWebRequest)WebRequest.Create( + "?" + BuildQuery(parameters, "utf8"));//GET请求request.Method = "GET";request.ReadWriteTimeout = 5000;request.ContentType = "text/html;charset=UTF-8";HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));//返回内容string retString = myStreamReader.ReadToEnd();return retString;}}/// <summary>/// 组装普通文本请求参数。